Se si ha a che fare con gli elenchi di convalida dei dati, è possibile utilizzare l'evento Worksheet_Change. Fare clic con il tasto destro sul foglio con la convalida dei dati e selezionare Visualizza codice. Digita qui:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Value
End Sub
Se hai a che fare con le combobox ActiveX, è un po 'più complicato. È necessario creare un modulo di classe personalizzato per collegare gli eventi. Per prima cosa, crea un modulo di classe chiamato CComboEvent e inserisci questo codice.
Public WithEvents Cbx As MSForms.ComboBox
Private Sub Cbx_Change()
MsgBox Cbx.Value
End Sub
Successivamente, creare un altro modulo di classe denominato CComboEvents. Ciò manterrà tutte le nostre istanze CComboEvent e le manterrà nell'ambito. Inserisci questo codice in 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
Infine, creare un modulo standard (non un modulo di classe). Avrai bisogno del codice per mettere tutte le tue combo box nei moduli di classe. Si potrebbe mettere questo in una procedura Auto_apri in modo che accada ogni volta che la cartella di lavoro viene aperta, ma dipende da voi.
Avrete bisogno di una variabile pubblica per contenere un'istanza di CComboEvents. Rendendolo pubblico lo faranno, e tutti i suoi figli, in ambito. Ne hai bisogno per far sì che gli eventi vengano attivati. Nella procedura, passa in rassegna tutte le caselle combinate, creando una nuova istanza CComboEvent per ognuna e aggiungendola a 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
Ora, ogni volta che un combobox viene modificato, l'evento si attiverà e, in questo esempio, una finestra di messaggio verrà visualizzato.
Si può vedere un esempio a https://www.dropbox.com/s/sfj4kyzolfy03qe/ComboboxEvents.xlsm
fai significa che devi opzione 'convalida' in quelle cellule ?? non una vera casella combinata che è un oggetto forma/forma ... –
@KazJaw questa domanda ha davvero bisogno di chiarimenti :) Se l'OP ha "migliaia" di caselle combinate, avrà bisogno di migliaia di gestori di eventi. Altrimenti, se sono solo un'opzione di validazione, un gestore 'Worksheet_Change' farà il trucco. –
@DavidZemens, dopo tutto ... hai ragione :) Quindi, penso che ci sia già una risposta per la domanda nel tuo commento e sotto (da @ user20623626) –