检查是否选中了基于工作表的复选框

时间:2012-07-31 13:58:04

标签: excel vba excel-vba checkbox excel-vba-mac

我正在尝试使用IF子句来确定是否选中了名为“Check Box 1”的复选框,以便在我的程序中进一步使用。

我目前的代码:

Sub Button167_Click()
 If ActiveSheet.Shapes("Check Box 1") = True Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub

这似乎不起作用,但调试告诉我

存在问题
      ActiveSheet.Shapes("Check Box 1")

但是,我知道这段代码有效(即使它有不同的用途):

ActiveSheet.Shapes("Check Box 1").Select
With Selection
.Value = xlOn

编辑: 如果需要更多信息,我的复选框(我的页面上有200个)位于sheet1中,名称为“Demande”。每个Checkbox都具有相同的格式名称“Check Box ...”。

所有帮助将不胜感激。感谢

5 个答案:

答案 0 :(得分:19)

Sub Button167_Click()
 If ThisWorkbook.Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value = 1 Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub
检查

1,未选中-4146,混合2(灰色框)

答案 1 :(得分:10)

这是你在尝试的吗?

Sub Sample()
    Dim cb As Shape

    Set cb = ActiveSheet.Shapes("Check Box 1")

    If cb.OLEFormat.Object.Value = 1 Then
        MsgBox "Checkbox is Checked"
    Else
        MsgBox "Checkbox is not Checked"
    End If
End Sub

Activesheet替换为相关的工作表名称。同时将Check Box 1替换为相关的复选框名称。

答案 2 :(得分:3)

previous answers的基础上,您可以利用True为-1且False为0的事实,并缩短您的代码:

Sub Button167_Click()
  Range("Y12").Value = _
    Abs(Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0)
End Sub

如果选中该复选框,则.Value = 1。

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0返回True

应用Abs功能会将True转换为1

如果取消选中该复选框,则.Value = -4146。

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0返回False

应用Abs功能会将False转换为0

答案 3 :(得分:0)

似乎在您使用的ActiveX复选框控件的VBA宏代码中

如果(ActiveSheet.OLEObjects(“ CheckBox1”)。Object.Value = True)

,对于您使用的“表单”复选框控件,

如果(ActiveSheet.Shapes(“ CheckBox1”)。OLEFormat.Object.Value = 1)

答案 4 :(得分:-2)

尝试:Controls("Check Box 1") = True