Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5190 / 13644 ツリー ←次へ | 前へ→

【52165】Listboxのイベントプロシジャー ハナ 07/10/26(金) 10:08 質問[未読]
【52166】Re:Listboxのイベントプロシジャー ハナ 07/10/26(金) 11:27 お礼[未読]
【52167】Re:Listboxのイベントプロシジャー 再送 ichinose 07/10/26(金) 11:30 発言[未読]

【52165】Listboxのイベントプロシジャー
質問  ハナ  - 07/10/26(金) 10:08 -

引用なし
パスワード
   いつもお世話になっています
Worksheetに配置したListboxにて、データを選択(クリック)すると
UserForm1を表示させるのですが、選択データを示す反転(青くなる)が
次のデータを選択しても残ります。
MultiSelectプロパティーは 0-fmMultiSelectSingleです
・Aデータ選択 Aデータ反転(青)UserForm1表示  
・UserForm1 Unload 後 Listbox上Aデータ反転(青)

・Bデータ選択 Listbox上Aデータ反転(青)& Bデータ反転(青)       これが問題です。 UserForm1 Unload 後 Bデータのみ反転(青)
 に戻ります。

以下がシートモジュールに作成したListboxのイベントプロシジャーです。
Private Sub Lbox_1_Click()
  Dim intListIdx As Integer    'リストインデックス格納
  Dim DATA_R As Range
  Dim DATA() As String
  '選択されたリストインデックスの取得
  intListIdx = Lbox_1.ListIndex
  Set DATA_R = Worksheets("WORK").Range("A" & (intListIdx + 2))
  '
  With UserForm1
   .TextBox1.Text = DATA_R.Value
   .TextBox2.Text = DATA_R.Offset(0, 1).Value
   .TextBox3.Text = DATA_R.Offset(0, 2).Value
   .TextBox4.Text = DATA_R.Offset(0, 3).Value
  End With
  UserForm1.Show
End Sub

自分なりに考えた原因としては、反転が移行する前にUserForm1に
制御が渡ってしまうためではないかと思うのですが。

・Bデータ選択でListbox上Aデータ(直前選択データ)の反転解消&Bデータ反転  UserForm1 Unload 後 Bデータのみ反転(青)

この状態にするために、どのような修正をすればよろしいでしょうか。
ご指導、宜しくお願いします。

【52166】Re:Listboxのイベントプロシジャー
お礼  ハナ  - 07/10/26(金) 11:27 -

引用なし
パスワード
   ichinoseさん
早速の回答ありがとうございました
変数の宣言の関係で、以下でやってみましたら思い通りの動作ができました。

シート上のイベントプロシジャー

Private Sub Lbox_1_Click()
  intListIdx = Lbox_1.ListIndex
  Application.OnTime Now(), "showfrm"
End Sub

標準モジュール

Public intListIdx As Long  'リストインデックス格納
Sub showfrm()
  Dim DATA_R As Range
  Dim DATA() As String
  Set DATA_R = Worksheets("WORK").Range("A" & (intListIdx + 2))
  With UserForm1
   .TextBox1.Text = DATA_R.Value
   .TextBox2.Text = DATA_R.Offset(0, 1).Value
   .TextBox3.Text = DATA_R.Offset(0, 2).Value
   .TextBox4.Text = DATA_R.Offset(0, 3).Value
  End With
  UserForm1.Show
End Sub

showfrmの、当該シートモジュール配置版はまだ未TRYですが、
早速やってみます。
助かりました。今後ともどうぞ宜しくお願いします。
**ichinoseさんの元記事に返信できなかったので、自記事への返信を
お礼で送信しました。

【52167】Re:Listboxのイベントプロシジャー 再送
発言  ichinose  - 07/10/26(金) 11:30 -

引用なし
パスワード
   おはようございます。

再送です。

>
>以下がシートモジュールに作成したListboxのイベントプロシジャーです。
>Private Sub Lbox_1_Click()
  Application.OnTime Now(), "showfrm"

>End Sub


標準モジュールに
'===============================================
Sub showfrm()
  Dim intListIdx As Integer    'リストインデックス格納
  Dim DATA_R As Range
  Dim DATA() As String
  '選択されたリストインデックスの取得
  intListIdx = Worksheets("Work").Lbox_1.ListIndex
  Set DATA_R = Worksheets("Work").Range("A" & (intListIdx + 2))
  '
  With UserForm1
   .TextBox1.Text = DATA_R.Value
   .TextBox2.Text = DATA_R.Offset(0, 1).Value
   .TextBox3.Text = DATA_R.Offset(0, 2).Value
   .TextBox4.Text = DATA_R.Offset(0, 3).Value
  End With
  UserForm1.Show
End Sub

これで試してみてください。
尚、showfrmは、当該シートモジュールに配置することも可能ですが、
その場合は、

Application.OnTime Now(), "showfrm"
呼び出しプロシジャーを xxxx.showfrm
にしなければなりません。

xxxxは、対象シートのCodename(オブジェト名)です。
シート名ではありませんよ!!

試してみてください


>
>自分なりに考えた原因としては、反転が移行する前にUserForm1に
>制御が渡ってしまうためではないかと思うのですが。
>
>・Bデータ選択でListbox上Aデータ(直前選択データ)の反転解消&Bデータ反転  UserForm1 Unload 後 Bデータのみ反転(青)
>
>この状態にするために、どのような修正をすればよろしいでしょうか。
>ご指導、宜しくお願いします。

5190 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free