0

我为我的复选框分配了一个宏,这样当你勾选它时,它会在单元格中设置一个特定的值。但是invalid qualifier,我的第一个Checkbox1.value 出现错误。

这是代码:

Option Explicit

Public CheckBox1 As Boolean

Sub CheckBox1_Click()

If CheckBox1.Value = True Then Range("Q10").Value = 1
If CheckBox1.Value = False Then Range("Q10").Value = 0

End Sub

谢谢!

4

1 回答 1

3

我假设您使用了名为 CheckBox1 的 ActiveX 控件,如果是这样,您遇到了问题,因为您还定义了公共布尔 CheckBox1。

您的代码不满意,因为 CheckBox1 布尔值的公共声明正在覆盖控制变量 CheckBox1 并且 aboolean没有.Value属性。如果您想将复选框值的使用存储在布尔值中,请从 Checkbox1 更改您的公共变量名称,否则完全删除此声明。

编辑:根据您的评论,您没有链接工作表中的复选框。代码必须知道 CheckBox1 是什么。由于您已经删除了布尔值,它现在不知道是什么Checkbox1。因此,您需要告诉它复选框在哪里。你可以通过多种方式做到这一点。如果它是一个表单复选框(不是我最初想到的 ActiveX),那么以下代码将起作用:

Sub Checkbox1()
    Dim cb As Object, myCheckBoxValue As Boolean

    'Get the object from the worksheet
    Set cb = ActiveSheet.Shapes("Check Box 1").OLEFormat.Object

    'Assign it's value to the boolean (1 is checked, -4146 is unchecked, 2 is mixed (grey box))
    If cb.Value = 1 Then myCheckBoxValue = True Else myCheckBoxValue = False

    'Output to worksheet
    If myCheckBoxValue Then
        ActiveSheet.Range("Q10").Value = 1
    Else
        ActiveSheet.Range("Q10").Value = 0
    End If
    Set cb = Nothing
End Sub

您也可以显着减少它,以下将起作用:

Sub Checkbox1()
    If ActiveSheet.Shapes("Check Box 1").OLEFormat.Object.Value = 1 Then
        ActiveSheet.Range("Q10").Value = 1
    Else
        ActiveSheet.Range("Q10").Value = 0
    End If
End Sub
于 2013-06-05T23:21:24.043 回答