VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/06/14(Tue) 17:31
投稿者ゆうり
Eメール
URL
タイトルRe^8: スプレッド使用時における明細行の選択操作について

先月、本掲示板に投稿させていただいたものです。
あれから少し時間が経ってしまいましたが、前回の課題について本日確認を実施してみました。
現状は、つめが甘く上手くいっていない状況です。
再度御質問させていただきたく下記に内容を記載いたします。
不手際があるようであれば、ご指摘いただければ幸いです。

【実施環境】
 VB5.0/SPREAD2.5J
【実現したい要件】
 上記サンプル画面でのスプレッドでの明細行をクリック(複数行選択可能)し、
 選択行における各列の値を取得したい。
【確認コード】
 下記3パターンで確認実施中。いずれもNGの結果です。

-----------------------------------------------------------
 (1)パターン1
  Dim i_cnt As Integer
    Dim sel_cnt As Long
    Dim selwk As Long
    Dim Sel_Txt         As Boolean
    For i_cnt = 1 To fp.Spread1.MaxRows
        sel_cnt = fp.Spread1.GetMultiSelItem(selwk)
        Sel_Txt = fp.Spread1.GetText(1, sel_cnt, ax1)  '選択行のax1をGet
        Sel_Txt = fp.Spread1.GetText(2, sel_cnt, az5)  '選択行のaz5をGet
          '以下、必要列数分記述
    Next i_cnt

『確認実施手順』 
  スプレッド明細行にて、2行目と4行目を選択し実行する。 
『結果』
  sel_cnt に、2が返されるが、4は返されない。
  選択行2行目の列(ax1)と、列(az5)の値は、正しく取得可能。
  但し、4行目の値は、Get出来ず。
   ⇒ For ループの中で、sel_cnt の値を確認しても、表示件数
    (MaxRows=10)までのループで、”2”しか値がセットされない。
-----------------------------------------------------------
 (2)パターン2 
   ※グレープシティ社のHPにて、類似事例があったので以下のコードで試してみました。

  Dim lngArray() As Long          '配列を宣言
    Dim lngCount As Long   '選択している行の総数を格納する変数
    Dim lngPre As Long '取得した行番号を一時的に格納する変数
    Dim i_ct As Integer  
    ReDim lngArray(0)  '配列の初期サイズを宣言
    lngCount = fp.Spread1.SelModeSelCount  '選択している行の総数を取得
    lngPre = 0
    For i_ct = 0 To lngCount - 1
      '選択行の行番号を配列に格納します
      lngArray(i_ct) = fp.Spread1.GetMultiSelItem(lngPre)
      'Sel_Txt = fp.Spread1.GetText(1, lngArray(i_ct), ax1)    '選択行:Get
      'Sel_Txt = fp.Spread1.GetText(2, lngArray(i_ct), az5)    '選択行:Get
      ReDim Preserve lngArray(i_ct + 1)  '配列のサイズを拡張します
    Next i_ct

『確認実施手順』 
  スプレッド明細行にて、2行目と4行目を選択し実行する。
  lngArray(i_ct) に、2が返されるが、4は返されない。
  (1)と同様の結果となる。

-----------------------------------------------------------
(3)パターン3 
  ※グレープシティ社のHPでの別の類似事例による以下のコードで試してみました。

  Dim c, r, c2, r2
    Dim x As Long
    With fp.Spread1
      If .IsBlockSelected Or . SelectionCount Then
       .BlockMode = True
         For x = 0 To . SelectionCount - 1
           .GetSelection x, c, r, c2, r2
           .Col = c
           .Col2 = c2
           .Row = r
           ow2 = r2
           ebug.Print .Col, .Col2, .Row, .Row2
         ext x
          .BlockMode = False
     End  
   End With

『確認実施手順』 
  スプレッド明細行にて、2行目と4行目を選択し実行する。
  GetSelection については動作確認できず。
  (プロパティがサポートされてません)


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -