0

複数選択を有効にしてリストボックス(Excel 2010)から選択した値を保存しようとしています。これは、リスト内の項目を繰り返し処理して、それらが選択されているかどうかを確認することで簡単に実行できます。ただし、リストボックスをいくつか追加する場合は、それぞれにコールバックを作成する必要があります。

Sub ListBox1_Changed()
Call DoStuff(Worksheets("Sheet1").ListBoxes(1))
End Sub

Sub ListBox2_Changed()
Call DoStuff(Worksheets("Sheet1").ListBoxes(2))
End Sub

Sub DoStuff(L as ListBox)
'Do stuff here
Sub

最終的には、複数のワークシートにまたがるこれらのリストボックスが多数存在することになります。

ここで私の質問は次のとおりです。マクロを呼び出した特定のボックスを参照し、この単一の関数をすべてのリストボックスに割り当てることは可能ですか?私は次のようなものを推測しています:

Sub ListBox_Changed(ByVal L as Object)
' This will not work btw ^^^^^^^^

' Magic code goes here.
Call DoStuff(L_converted_to_ListBox_Format)
End Sub

私はユーザーフォームを使用していませんが、リストボックスをワークシートに直接配置しただけであることに注意してください。

ありがとう!

4

1 に答える 1

1

このように、を使用して、を呼び出したApplication.Callerものを判別できます。ListBoxSub

Sub ListBox_Changed()
    Dim v As Variant
    Dim lb As ListBox
    v = Application.Caller
    On Error Resume Next
    Set lb = Me.ListBoxes(v)
    If Err.Number <> 0 Then Exit Sub
    On Error GoTo 0
    DoStuff lb
End Sub

Sub DoStuff(lb As ListBox)
    Debug.Print lb.List(lb.Value)
End Sub
于 2013-02-06T05:35:02.273 に答える