Если вы имеете дело с списками проверки данных, вы можете использовать событие 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
Наконец, создайте стандартный модуль (не модуль класса). Вам понадобится код, чтобы поместить все ваши comboboxes в модули классов. Вы можете поместить это в процедуру Auto_Open, чтобы это происходило всякий раз, когда рабочая книга открыта, но это зависит от вас.
Вам понадобится переменная Public для хранения экземпляра CComboEvents. Публикация будет посвящена этому и всем его детям. Вы нуждаетесь в них в области действия, чтобы события запускались. В этой процедуре пропустите все выпадающие списки, создав новый экземпляр 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
Теперь, всякий раз, когда вызывается combobox, событие срабатывает, и в этом примере будет отображаться окно сообщения.
Вы можете увидеть пример на https://www.dropbox.com/s/sfj4kyzolfy03qe/ComboboxEvents.xlsm
вы имеете в виду у вас есть вариант «проверки» в этих клетках ?? не настоящий combobox, который является объектом формы/формы ... –
@KazJaw этот вопрос действительно нуждается в разъяснении :) Если OP имеет «тысячи» combobox, ему понадобятся тысячи обработчиков событий. В противном случае, если это только опция проверки, обработчик 'Worksheet_Change' сделает трюк. –
@DavidZemens, в конце концов ... вы правы :) Итак, я думаю, что уже есть ответ на вопрос в вашем комментарии и ниже (от @ user20623626) –