Come utilizzare gli eventi con i controlli pulsante di opzione su Userform

Sto cercando di aggiungere un pulsante di opzione dall’intervallo nel foglio di lavoro di Excel.

For Each Value In OptionList Set opt = UserForm3.Controls.Add("Forms.OptionButton.1", "radioBtn" & i, True) opt.Caption = Value opt.Top = opt.Height * i opt.GroupName = "Options" UserForm3.Width = opt.Width UserForm3.Height = opt.Height * (i + 2) i = i + 1 Next 

Voglio creare un gestore di eventi in modo che se viene selezionato radiobtn1 durante l’esecuzione del codice da parte dell’utente. Anche se ho ricevuto molte risposte, queste sono pensate per la forma utente del foglio di lavoro.

La mia intenzione è di lavorare sul modulo utente VBA. Per favore aiutami con i tuoi pensieri.

Esiste solo un tipo di userform, tuttavia c’è una confusione [eterna] che circonda i due tipi di controlli disponibili per Excel, esacerbati dalla terminologia contrastante utilizzata da diverse fonti online. (Solo le sezioni relative ai controlli ActiveX si applicano a userforms.) Forse posso aiutare a fare un po ‘di luce mettendola in parole che mi aiutano a capire.


Panoramica:

  • Esistono due tipi di controlli: controlli del modulo e controlli ActiveX :

    • Entrambi i tipi di controlli possono essere utilizzati sui fogli di lavoro, ma solo i controlli ActiveX possono essere utilizzati su userform .

    • I controlli del modulo fanno parte della collezione Shapes (proprio come gli oggetti di disegno), e quindi sono indicati come: * <code/> foglio di lavoro </ code> * ** <code>. </ code> </code><code> Shapes ( ** * controlname * ** ") < / code> **">

    • I controlli ActiveX sono fondamentalmente parte del foglio di lavoro e sono quindi denominati:
      * <code/> foglio di lavoro </ code> * ** <code>. </ code> ** * </code><code> controlname </ code> *

    • Entrambi i tipi di controlli possono essere creati, modificati ed eliminati dal foglio di lavoro o programmaticamente con VBA, tuttavia i 2 tipi di controlli hanno una syntax leggermente diversa quando si utilizza VBA per riferirsi a essi.

  • Alcuni siti discutono anche di un modulo dati . Questo non è altro che un userform creato appositamente per l'inserimento / manipolazione dei dati, quindi avrebbe avuto più senso chiamarli (il suono più familiare) "Data User Userform" .

  • La documentazione di Office si riferisce anche occasionalmente a un foglio di lavoro come modulo. Sebbene ciò sia tecnicamente corretto, non lasciare che questo ti confonda. Pensa che la parola "forma" sia usata in senso generale :

    immagine del dizionario: forma


Due tipi di controlli

  1. Controlli del modulo

  2. Controlli ActiveX

I due sembrano, si comportano e sono controllati allo stesso modo, ma non in modo identico. (Elenco qui .)

Ad esempio, confrontiamo i due tipi di caselle combinate . In alcuni linguaggi di programmazione, i controlli comparabili sono indicati come "menu a discesa" o "elenco a discesa" . In Excel, abbiamo una " casella combinata controllo forma " e una " casella combinata controllo ActiveX " :

confronta i tipi di controllo (Clicca sull'immagine per ingrandire.)

"Nome predefinito" si applica ai controlli creati manualmente . I controlli creati a livello di codice non hanno (o richiedono) un nome predefinito e pertanto dovrebbero essere assegnati immediatamente dopo la creazione.


differenze tra i controlli

(Fonte: la mia risposta )


Informazioni sui controlli ActiveX e relativi problemi di sicurezza

Un controllo ActiveX è un'estensione di VBA Toolbox. I controlli ActiveX vengono utilizzati proprio come si farebbe con qualsiasi controllo incorporato standard, come il controllo CheckBox. Quando si aggiunge un controllo ActiveX a un'applicazione, diventa parte dell'ambiente di sviluppo e di runtime e fornisce nuove funzionalità per l'applicazione.

  • Un controllo ActiveX è implementato come un server in-process (in genere un piccolo object) che può essere utilizzato in qualsiasi contenitore OLE. Si noti che la funzionalità completa di un controllo ActiveX è disponibile solo se utilizzata all'interno di un contenitore OLE progettato per essere a conoscenza dei controlli ActiveX.

  • Questo tipo di contenitore, denominato contenitore di controllo o object di controllo , può gestire un controllo ActiveX utilizzando le proprietà e i metodi del controllo e riceve notifiche dal controllo ActiveX sotto forma di eventi. La seguente figura mostra questa interazione:

    esempio
    ( Fonte : questo e questo )

Guarda anche:

  • Wikipedia: ActiveX

  • Symantec.com: discussione sulle vulnerabilità ActiveX

  • How-To Geek: quali controlli ActiveX sono e perché sono pericolosi


Pulsanti di opzione (pulsanti di opzione)

In Excel, i due tipi di pulsanti di opzione sono in realtà chiamati pulsanti di opzione . Per confondere ulteriormente le questioni:

  • il nome predefinito per il controllo del modulo è OptionButton1 .

  • il nome predefinito per il controllo ActiveX è Option Button 1 .

Un buon modo per distinguerli è aprire l'elenco Proprietà del controllo (sulla barra multifunzione sotto la scheda Sviluppo o facendo clic con il pulsante destro del mouse sul controllo e scegliendo Properties o premendo F4 ), perché il controllo ActiveX ha molte più opzioni che la forma più semplice controllo.

I pulsanti di opzione e le caselle di controllo possono essere collegati insieme (quindi è ansible selezionare solo una opzione alla volta dal gruppo) posizionandoli in una casella di gruppo condivisa.

Selezionare il controllo casella di gruppo e quindi tenere premuto Ctrl mentre si seleziona ciascuno degli altri controlli che si desidera raggruppare. Fare clic con il tasto destro del mouse sul controllo della casella di gruppo e selezionare GroupingGroup .

I primi due collegamenti sottostanti sono serie separate di istruzioni per la gestione di ciascun tipo di pulsante di opzione.


MANIPOLAZIONE GESTIONE EVENTI:

Eventi di controllo del modulo (solo evento Click )

Gli eventi di controllo del modulo sono in grado di rispondere solo a un evento: l'evento Click . (Maggiori informazioni qui .) Si noti che questa sezione non si applica a userform poiché utilizzano solo controlli ActiveX.

Per aggiungere una procedura per l'evento Click :

  • Fare clic con il tasto destro del mouse sul controllo e selezionare Assign Macro...

  • Nella finestra di dialogo "Assegna macro":

    • Selezionare una procedura esistente e fare clic su OK o,

    • Creare una nuova procedura in VBE facendo clic su Nuovo ... , o,

    • Registrare una nuova macro facendo clic su Registra ... , o,

    • Per rimuovere l'evento assegnato, cancellarne il nome dal campo Macro Name e fare clic su OK .

    assegnare eventi (Clicca sull'immagine per ingrandire.)

Per rinominare, modificare o eliminare macro esistenti, premi Alt + F8 per aprire l'interfaccia Macro :

Finestra di dialogo Macro


Eventi di controllo ActiveX

I controlli ActiveX hanno un elenco più ampio di eventi a cui possono essere impostati per rispondere.

Per assegnare eventi ai controlli ActiveX, fare clic con il tasto destro del mouse sul controllo e selezionare View Code . Nel VBE, è ansible incollare il codice o scegliere eventi specifici dall'elenco a discesa nella parte superiore destra della finestra VBE.

eventi activeX (Clicca sull'immagine per ingrandire.)

Controlla la gestione degli eventi su un modulo utente:

Gli eventi possono anche essere utilizzati nei controlli su userform. Poiché solo i controlli ActiveX possono essere posizionati come userform, avrai il trade-off "più codifica + più funzionalità".

I controlli ActiveX vengono aggiunti a userform allo stesso modo in cui vengono aggiunti a un foglio di lavoro. Tieni presente che tutti gli eventi assegnati all'utente stesso (cioè, lo sfondo) saranno "bloccati" in qualsiasi area coperta da un controllo, quindi potresti dover assegnare gli stessi eventi ai controlli e al modulo utente.

Ad esempio , per fare in modo che questo form utente risponda a MouseMove qualsiasi punto del modulo , lo stesso codice evento è stato applicato a userform, caselle di testo, pulsanti di opzione e frame :

Un userform con controlli che rispondono agli eventi


ESEMPI VBA

Aggiungi / Modifica / Elimina un pulsante di opzione controllo modulo usando VBA:

 Sub formControl_add() 'create form control Dim ws As Worksheet: Set ws = ActiveSheet With ws.Shapes.AddFormControl(xlOptionButton, 25, 25, 100, 100) .Name = "cOptionButton1" 'name control immediately (so we can find it later) End With End Sub Sub formControl_modify() 'modify form control's properties Dim ws As Worksheet: Set ws = ActiveSheet ws.Shapes("cOptionButton1").Select With Selection 'shapes must be Selected before changing .Characters.Text = "wxyzabcd" End With End Sub Sub formControl_delete() 'delete form control Dim ws As Worksheet: Set ws = ActiveSheet ws.Shapes("cOptionButton1").Delete End Sub 
  • Metodo Shapes.AddShape (Excel)

  • Proprietà forma (Excel)

  • Oggetto caratteri (Excel)


Aggiungi / Modifica / Elimina un pulsante di comando ActiveX tramite VBA:

 Sub activexControl_add() 'create ActiveX control Dim ws As Worksheet: Set ws = ActiveSheet With ws.OLEObjects.Add("Forms.CommandButton.1") .Left = 25 .Top = 25 .Width = 75 .Height = 75 .Name = "xCommandButton1" 'name control immediately (so we can find it later) End With End Sub Sub activexControl_modify() ' modify activeX control's properties Dim ws As Worksheet: Set ws = ActiveSheet With ws.OLEObjects("xCommandButton1").Object .Caption = "abcxyz" .BackColor = vbGreen End With End Sub Sub activexControl_delete() ' delete activeX control Dim ws As Worksheet: Set ws = ActiveSheet ws.OLEObjects("xCommandButton1").Delete End Sub 
  • Metodo OLEObjects.Add (Excel)

  • BackColor, Proprietà ForeColor (controlli ActiveX)


Aggiungi / Rimuovi elementi da una casella combinata controllo modulo:

 Sub ComboBox_addRemoveItems_FormControl() Dim ws As Worksheet: Set ws = ActiveSheet 'add item to form control combo box ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.AddItem "abcd" 'remove all items from from form control combo bo ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.RemoveAllItems End Sub 

Aggiungi / Rimuovi elementi da una casella combinata ActiveX:

 Sub ComboBox_addRemoveItems_ActiveXControl() Dim ws As Worksheet: Set ws = ActiveSheet 'add items to ActiveX combo box ActiveWorkbook.Sheets("Sheet1").ComboBox1.AddItem "abcd" 'remove all items from ActiveX combo box ActiveWorkbook.Sheets("Sheet1").ComboBox1.Clear End Sub 

Maggiori informazioni:

  • Office.com: aggiungi una casella di controllo o un pulsante di opzione ( controlli modulo )

  • Office.com: aggiungi una casella di controllo, pulsante di opzione o pulsante di commutazione ( controlli ActiveX )

  • Office.com: panoramica di moduli, controlli di modulo e controlli ActiveX su un foglio di lavoro

  • Office.com: triggers la selezione tramite i controlli di selezione (caselle di controllo e di elenco)

  • Office.com: aggiungi, modifica, trova ed elimina righe utilizzando un modulo dati

  • MSDN: membri di forma VBA

  • MSDN: utilizzo di controlli ActiveX su fogli (Office)

  • Exceldemy: come utilizzare i controlli modulo in Excel

  • MSDN: utilizzo dei controlli Windows Form su fogli di lavoro Excel (Visual Studio)

  • Microsoft TechNet: comportamento dei controlli ActiveX incorporati nei documenti di Office