2011-08-03 18 views
7

Quando si aggiunge una casella di controllo, come si accede al valore da VBA?Come accedere alla casella di controllo da VBA in Excel 2007

  • In Excel 2007, sulla barra multifunzione Developer
  • Inserisci, Form Controls, Casella
  • Rinominato Casella di controllo per chkMyCheck
  • Aggiunto Macro di casella di controllo, ora ho Module1 con chkMyCheck_Clicked

Tutti i seguenti errori

Sheets("Sheet1").chkMyCheck.Checked 
Sheets("Sheet1").chkMyCheck.Value 
Sheets("Sheet1").Shapes("chkMyCheck").Checked 
Sheets("Sheet1").Shapes("chkMyCheck").Value 
Sheet1.chkMyCheck.Checked 
Sheet1.chkMyCheck.Value 

Sheet1.Shapes ("chkMyCheck") sembra trovare l'oggetto, ma non espone alcuna proprietà che sembra probabile che restituisca lo stato selezionato.

risposta

8

capito

If Sheet1.Shapes("chkMyCheck").ControlFormat.Value = xlOn Then 
..... 
+0

questo ha lavorato molto per me in Excel 2007. Grazie! – James

4

Un modo:

Dim oCheck As Object 
Set oCheck = Sheet1.CheckBoxes("chkMyCheck") 
MsgBox (oCheck.Value = xlOn) 

Edit: ecco un altro metodo - forse questo uno lavorerà per voi ...

Sub Tester2() 
    Dim sh As Shape 
    For Each sh In Sheet1.Shapes 
     If sh.Type = msoFormControl Then 
      If sh.FormControlType = xlCheckBox Then 
       Debug.Print sh.Name & "=" & sh.ControlFormat.Value 
      End If 
     End If 
    Next sh 
End Sub 
+0

Inoltre non funziona. Non esiste alcuna proprietà CheckBoxes su un foglio in Excel 2007 (almeno non è la mia copia). –

+1

Testato bene per me: casella di controllo Controlli controlli, Excel 2007 su Windows XP e 7. È vero che non esiste alcuna raccolta "CheckBoxes" nel Visualizzatore oggetti, ma ciò non impedisce che funzioni. –

+3

Se si fa clic con il pulsante destro del mouse nel Visualizzatore oggetti e si seleziona Mostra membri nascosti, verranno visualizzati Casella di controllo e Caselle di controllo. Sono deprecati, ma sono ancora lì. –

0

Per completezza, se utilizzi una casella di controllo ActiveX invece di una normale casella di controllo, la sintassi è

If Sheet1.Shapes("chkMyCheck").OLEFormat.Object.Object.Value Then 
... 

trovato utilizzando la finestra Locals e un set variabile per la forma -

Dim shp as Shape 
Set shp = Sheet1.Shapes("chkMyCheck") 
Stop