检查工作表复选框是否被选中

25

我想使用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个复选框,它们位于名为“Demande”的Sheet1中。每个复选框都具有相同的格式化名称“Check Box ...”。


1
ActiveSheet.Shapes("Check Box 1").Value = True 的翻译是什么? - LittleBobbyTables - Au Revoir
2
表单控件复选框还是ActiveX控件复选框? - Motomotes
@Motes 有没有什么快速的方法可以让我不用启动 Parallels 就能知道? - Paolo Bernasconi
你好,能否请你帮我用JavaScript获取复选框的值?谢谢。 - Anuja P
您可以在此处使用 CodeName 找到另一种解决方案 here - Rafa Barragan
5个回答

35
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为混合状态(灰色框)


这个方法非常有效。@Siddharth,你的答案也是正确的。 - Paolo Bernasconi
如何在解析Excel文件后,在JavaScript代码中获取值。我需要来自Excel工作簿的复选框值。http://stackoverflow.com/questions/34064853/parse-the-excel-workbook-and-get-the-checkbox-value-in-javascipt-or-angular - Anuja P
1
FYI -4146 等同于 xlOff,而 1 等同于 xlOn。 - tomatoeshift
@tomatoeshift 和 2 = xlMixed. - undefined

12

这是你想要的吗?

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
这将选中该框,但要读取它,您需要将值与1进行比较。 - Motomotes
+1 我之前不知道这个。我要删除我的回复,因为它可能会导致混淆。我刚试了一下,确实可以。在这种情况下,checked 似乎由值 1 和 0(而不是 true 和 false)进行验证。 - html_programmer
@Motes:是的。我已经添加了那一部分。我正在阅读黑莓的帖子,所以误读了。我以为用户想要勾选复选框。:P - Siddharth Rout
如果您重复使用形状引用,可能会更有效率,而且他很可能出于可读性的考虑而这样做。 - Motomotes
@SiddharthRout,抱歉“效率较低”这个词用错了。Motes的代码只是更短,即使我确定执行时间对于你们两个的答案来说都是相同的。 - Paolo Bernasconi
显示剩余2条评论

6
在 VBA 宏代码中使用 ActiveX 复选框控件。
If ActiveSheet.OLEObjects("CheckBox1").Object.Value = True Then

对于一个表单中的复选框控件,您可以使用以下代码:

If ActiveSheet.Shapes("CheckBox1").OLEFormat.Object.Value = xlOn Then

(使用xlOffxlMixed来检查这些状态。)


4

之前答案的基础上,您可以利用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

你好,能否请你帮我用JavaScript获取复选框的值?谢谢。 - Anuja P

-2
尝试一下:Controls("Check Box 1") = True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接