无效限定符 - 尝试触发复选框时单击

时间:2013-06-05 22:39:12

标签: excel vba

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

以下是代码:

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

谢谢!

1 个答案:

答案 0 :(得分:3)

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

您的代码不满意,因为CheckBox1 boolean的公共声明覆盖了控件变量CheckBox1,而boolean没有.Value属性。如果要在布尔值中存储checkbox值的使用,则从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