11

ComboBoxes である Excel ワークシートに何千ものセルがあります。ユーザーはランダムに 1 つを選択して入力します。

選択した ComboBox 値を取得するにはどうすればよいですか? ComboxBoxes が選択されたときに関数 (つまり、イベント ハンドラー) をトリガーする方法はありますか?

4

4 に答える 4

12

コンボボックスの値が変更されたときにトリガーされる以下の変更イベントを使用できます。

Private Sub ComboBox1_Change()
'your code here
End Sub

また、以下を使用して選択した値を取得できます

ComboBox1.Value
于 2013-03-21T01:43:05.063 に答える
9

データ検証リストを扱っている場合は、Worksheet_Change イベントを使用できます。データ検証のあるシートを右クリックし、[コードの表示] を選択します。次に、次のように入力します。

Private Sub Worksheet_Change(ByVal Target As Range)

    MsgBox Target.Value

End Sub

ActiveX コンボボックスを扱っている場合は、もう少し複雑です。イベントをフックするカスタム クラス モジュールを作成する必要があります。最初に、CComboEvent という名前のクラス モジュールを作成し、このコードをその中に入れます。

Public WithEvents Cbx As MSForms.ComboBox

Private Sub Cbx_Change()

    MsgBox Cbx.Value

End Sub

次に、CComboEvents という名前の別のクラス モジュールを作成します。これにより、すべての CComboEvent インスタンスが保持され、スコープ内に保持されます。このコードを CComboEvents に入れます。

Private mcolComboEvents As Collection

Private Sub Class_Initialize()
    Set mcolComboEvents = New Collection
End Sub

Private Sub Class_Terminate()
    Set mcolComboEvents = Nothing
End Sub

Public Sub Add(clsComboEvent As CComboEvent)

    mcolComboEvents.Add clsComboEvent, clsComboEvent.Cbx.Name

End Sub

最後に、標準モジュール (クラス モジュールではありません) を作成します。すべてのコンボボックスをクラス モジュールに入れるコードが必要です。これを Auto_Open プロシージャに配置して、ブックが開かれるたびに発生するようにすることもできますが、それはあなた次第です。

CComboEvents のインスタンスを保持するには、Public 変数が必要です。パブリックにすることで、それとそのすべての子がスコープ内に保持されます。イベントがトリガーされるように、スコープ内でそれらが必要です。この手順では、すべてのコンボボックスをループして、それぞれに新しい CComboEvent インスタンスを作成し、それを CComboEvents に追加します。

Public gclsComboEvents As CComboEvents

Public Sub AddCombox()

    Dim oleo As OLEObject
    Dim clsComboEvent As CComboEvent

    Set gclsComboEvents = New CComboEvents

    For Each oleo In Sheet1.OLEObjects
        If TypeName(oleo.Object) = "ComboBox" Then
            Set clsComboEvent = New CComboEvent
            Set clsComboEvent.Cbx = oleo.Object
            gclsComboEvents.Add clsComboEvent
        End If
    Next oleo

End Sub

これで、コンボボックスが変更されるたびにイベントが発生し、この例ではメッセージ ボックスが表示されます。

https://www.dropbox.com/s/sfj4kyzolfy03qe/ComboboxEvents.xlsmで例を確認できます。

于 2013-03-21T13:25:36.890 に答える
0

ComboBox コントロールから選択した値を取得する簡単な方法は次のとおりです。

Private Sub myComboBox_Change()
  msgbox "You selected: " + myComboBox.SelText
End Sub
于 2020-05-21T03:06:22.913 に答える
-1

たぶん、(疑似コード)のようなものを使用して、プログラムでイベントハンドラーを設定できるでしょう

sub myhandler(eventsource)
  process(eventsource.value)
end sub

for each cell
  cell.setEventHandler(myHandler)

しかし、VB/VBA でこれを達成するための構文がわかりません。

于 2013-03-21T08:45:58.853 に答える