【问题标题】:Checking if a worksheet-based checkbox is checked检查是否选中了基于工作表的复选框
【发布时间】:2012-07-29 07:42:51
【问题描述】:

我正在尝试使用 IF 子句来确定是否选中了名为“复选框 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”。每个复选框都具有相同的格式名称“复选框...”。

【问题讨论】:

  • ActiveSheet.Shapes("Check Box 1").Value = True?
  • 表单控件复选框还是活动x控件复选框?
  • @Motes 有什么方法可以快速知道,而无需我启动 Parallels?
  • 嗨,你能帮我以同样的方式在javascript中获取复选框的值
  • 你可以使用CodeNamehere找到另一个解决方案

标签: excel vba macos checkbox


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是你正在尝试的吗?

    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 替换为相关的复选框名称。

    【讨论】:

    • 这将选中该框,但要阅读它,您需要根据 1 设置检查值。
    • +1 我以前不知道这一点。我将删除我的回复,因为它可能会导致混乱。刚试了一下,发现它有效。在这种情况下,检查似乎由值 1 和 0 验证(不是真假)。
    • @Motes:是的。我已经添加了那部分。我正在阅读黑莓的帖子,所以误读了它。我以为用户想选中复选框。 :P
    • 如果你重复使用形状参考,它可能会更有效,而且他这样做可能是为了可读性。
    • @PaoloBernasconi:您能解释一下您所说的效率较低是什么意思吗?它是如何降低效率的?
    【解决方案3】:
    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,你的回答也是正确的
    • 解析excel文件后如何在javascript代码中获取你的值。我需要 excel 工作簿 stackoverflow.com/questions/34064853/… 中的复选框值
    【解决方案4】:

    previousanswers 的基础上,您可以利用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中获取复选框的值
    【解决方案5】:

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

    If (ActiveSheet.OLEObjects("CheckBox1").Object.Value = True)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 2012-02-09
      • 1970-01-01
      • 2017-07-28
      • 2018-03-27
      • 2012-07-13
      • 2016-04-22
      相关资源
      最近更新 更多