Excel VBA質問箱 IV

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

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


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

【5595】マルチページでリストボックス tonton 03/5/21(水) 15:13 質問
【5610】Re:マルチページでリストボックス ichinose 03/5/21(水) 23:41 回答
【5616】Re:マルチページでリストボックス tonton 03/5/22(木) 10:58 お礼

【5595】マルチページでリストボックス
質問  tonton  - 03/5/21(水) 15:13 -

引用なし
パスワード
   こんにちは。
VBA初心者です。

ユーザーフォームのマルチページ(5ページ)にリストボックスを
それぞれ作成しました。
各ページごとに別シートのセル(a1:a10)をリストアップしています。
指定したセルに、選択したリスト(a3)の右隣のセル(b3)を参照した
いのです。

ListBox名.Listindex.Valueを使えばいいのはわかるのですが、
オブジェクトを「今選択しているリストボックス」とするには
どのようにすればいいのでしょうか。

説明がへたですみません。
よろしくお願いします。

【5610】Re:マルチページでリストボックス
回答  ichinose  - 03/5/21(水) 23:41 -

引用なし
パスワード
   ▼tonton さん:
こんばんは。
>ユーザーフォームのマルチページ(5ページ)にリストボックスを
>それぞれ作成しました。
>各ページごとに別シートのセル(a1:a10)をリストアップしています。
>指定したセルに、選択したリスト(a3)の右隣のセル(b3)を参照した
>いのです。
>
>ListBox名.Listindex.Valueを使えばいいのはわかるのですが、
>オブジェクトを「今選択しているリストボックス」とするには
>どのようにすればいいのでしょうか。
仮に以下のユーザーフォームを想定します。
ユーザーフォーム(Userfrom1)
 マルチページコントロール(MultiPage1)を一つ配置
   説明の都合上、ページは2ページとしておきましょう
   Page1にリストボックス(Listbox1)を配置
    Listbox1のRowsourceプロパティに"Sheet1!A1:A10"を予め設定。
   Page2にリストボックス(Listbox2)を配置
    Listbox2のRowsourceプロパティに"Sheet2!A1:A10"を予め設定。
 コマンドボタン(CommandButton1)を一つ設定

例は、コマンドボタンがクリックされたら、

>選択したリスト(a3)の右隣のセル(b3)を参照

ここでは、メッセージボックスで表示するようにしました。
標準モジュールで
'======================================
Sub test()
  UserForm1.Show
End Sub

当該ユーザーフォームモジュールで
'======================================
Private Sub UserForm_Initialize()
  With MultiPage1
   For idx = 0 To .Pages.Count - 1
    .Pages(idx).Controls("listbox" & idx + 1).ListIndex = 0
    Next
   End With
End Sub
'==========================================
Private Sub CommandButton1_Click()
  With MultiPage1
   idx = .Pages(.Value).Controls("listbox" & .Value + 1).ListIndex + 1
   rng = .Pages(.Value).Controls("listbox" & .Value + 1).RowSource
   MsgBox Range(rng).Cells(idx).Offset(0, 1).Value
'     これでリストボックスでセルA3に該当するメンバが選択されたらB3の内容を
'     表示します
   End With
End Sub

要点は、
・MultiPage1.Valueで、アクティブなページインデックスを取得する。

・Controlsプロパティを使用して、そのページに配置されたリストボックスを取得する。

の2点だと思いますが、上記のコードは、さらに

ページインデックスとリストボックスのオブジェクト名の最後の数字との間に
一定の関係(ページインデックス+1=リストボックスのオブジェックト名の最後の数字)
を持たせています。

【5616】Re:マルチページでリストボックス
お礼  tonton  - 03/5/22(木) 10:58 -

引用なし
パスワード
   ichinoseさん こんにちは。

わかりやすい回答ありがとうございました。
無事に解決しました。

VBAは始めたばかりなので、まだまだ難しいこと
だらけですが、いろいろな事に挑戦していきたいと
思っています。

また行き詰まったときにはお力をお貸し下さい。

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