H o l a:
No pusiste en cuál línea de la macro se detiene.
Tampoco indicas si es un checkbox de Form o de ControlActiveX.
Voy a suponer que es de ControlActiveX y que el checkbox está en la hoja "Hoja1"
Cuando vas a utilizar un control que se encuentra en una hoja, le tienes que indicar a cuál hoja pertenece, por eso te envía el mensaje:
Si ejecutas algo como esto:
Sub MostrarMsg()
If CheckBox1.Value Then
MsgBox "si"
Else
MsgBox "no"
End If
End Sub
Te va a enviar el error: "Se requiere un objeto"
Ahora si le indicas el objeto Sheet, poniendo sheets("Hoja1"), quedaría así:
Sub MostrarMsg()
If Sheets("Hoja1").CheckBox1.Value Then
MsgBox "si"
Else
MsgBox "no"
End If
End Sub
De esa forma se está indicando que el checkbox pertenece al objeto sheet y que se encuentra en la hoja con el nombre "Hoja1", si es otra hoja, cambia "Hoja1" por el nombre de la hoja.
La otra incógnita es, si ejecutas el código en dentro de "Microsoft Excel Obejcts", "Sheet1"-, no te envía error.
No te envía el error, porque VBA asume que estás utilizando los componentes del objeto Hoja en la cual estás ejecutando el código, entonces podrías tener esto dentro del código de la hoja:
Private Sub CheckBox1_Click()
If CheckBox1.Value Then
MsgBox "Si"
Else
MsgBox "No"
End If
End Sub
O podrías poner esto:
Private Sub CheckBox1_Click()
If ActiveSheet.CheckBox1.Value Then
MsgBox "Si"
Else
MsgBox "No"
End If
End Sub
Incluso:
Private Sub CheckBox1_Click()
If Sheets("Hoja1").CheckBox1.Value Then
MsgBox "Si"
Else
MsgBox "No"
End If
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias