Checkbox crete dinamicamente
Hai un problema con Excel? 
Checkbox crete dinamicamente
di Valerio (utente non iscritto) data: 12/06/2013 15:19:08
Salve,
ho sviluppato il seguente codice per creare delle CheckBox dinamicamente in una UserForm.
Ho un problema quando, andando a cliccare sul CommandButton, vorrei che mi comparisse una MsgBox per ciascuna CheckBox selezionata.
Quando però clicco sul pulsante, mi compare il seguente errore.
Compile error:
Sub or Function non defined
Dove sbaglio???
Private Sub UserForm_Activate()
Dim theCheckBox_ID(1 To 10) As MSForms.CheckBox
Dim CheckBoxTop As Integer
CheckBoxTop = 75
Dim i As Integer
For i = 1 To 10
Set theCheckBox_ID(i) = Controls.Add("Forms.CheckBox.1")
With theCheckBox_ID(i)
.Name = "chk_" & i
.Value = False
.Caption = ""
.Top = CheckBoxTop
.Left = 12
End With
CheckBoxTop = CheckBoxTop + 30
Next
Me.Height = CheckBoxTop + 100
End Sub
Private Sub cmd_SAVE_Click()
Dim j As Integer
For j = 1 To 10
If theCheckBox_ID(i).Value = True Then
MsgBox (theCheckBox_ID(i).Name)
End If
Next
End Sub |
di Vecchio Frac data: 12/06/2013 21:26:50
Il codice del commandbutton di salvataggio non sa che cosa sia "theCheckBox_ID(i)" e non può saperlo perchè si tratta di un vettore (da 1 a 10 elementi) che nasce e muore nella sub Userform_Initialize. Si tratta di un classico caso di visibilità delle variabili.
Potresti spostare la dichiarazione di questa matrice sotto Option Explicit, in modo da renderla pubblica:
Option Explicit
Public theCheckBox_ID(1 To 10) As MSForms.CheckBox
e quindi accessibile a tutte le sub del progetto.
Ma ti faccio notare che tu stai assegnando un nome ad ogni singolo oggetto checkbox:
.Name = "chk_" & i
ed è a questo nome che ti puoi/devi riferire nella routine associata al command button "cmd_save".
Riscrivi la routine associata al command button come segue, e tutto funzionerà ^_^
Private Sub cmd_SAVE_Click()
Dim j As Integer
For j = 1 To 10
If Controls("chk_" & j) = True Then
MsgBox Controls("chk_" & j).Name
End If
Next
End Sub |
Vuoi Approfondire?