2011-08-03 29 views
7

Al agregar una casilla de verificación, ¿cómo se accede al valor de VBA?Cómo acceder a Checkbox desde VBA en Excel 2007

  • En Excel 2007, en la cinta de desarrollador
  • Insertar, controles de formulario de casilla de verificación
  • Renombrado casilla de verificación para chkMyCheck
  • Agregado macro para casilla de verificación, que ahora tiene el módulo 1 con chkMyCheck_Clicked

Todos los siguientes fallan

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") parece encontrar el objeto, pero no expone ninguna propiedad que parezca probable para devolver el estado comprobado.

Respuesta

8

lo descubrió

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

Esto funcionó muy bien para mí en Excel 2007. Gracias! – James

4

Una manera:

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

Editar: aquí hay otro método - tal vez éste funcionará para usted ...

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

Tampoco funciona. No hay propiedad CheckBoxes en una hoja en Excel 2007 (al menos no en mi copia). –

+1

Probado bien para mí: casilla de verificación de controles de formulario, Excel 2007 en Windows XP y 7. Es cierto que no hay colección "CheckBoxes" en el Examinador de objetos, pero eso no lo detiene. –

+3

Si hace clic con el botón derecho en el Examinador de objetos y elige Mostrar miembros ocultos, verá la casilla de verificación y las casillas de verificación. Están obsoletos, pero aún están allí. –

0

Para completar, si está utilizando una casilla de verificación ActiveX en lugar de una casilla de verificación normal, la sintaxis es

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

encontrado usando la ventana locales y un conjunto variable a la forma -

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