【问题标题】:VBA CheckBox Not Checked If Statement Won't Initiate如果语句不会启动,则不检查 VBA 复选框
【发布时间】:2016-12-05 07:23:41
【问题描述】:

这个超级简单的东西目前让我发疯。我有一个 If 语句来处理 CheckBox_Click() 事件,该事件应该根据 CheckBox 的状态执行两件事之一。虽然在选中该框时它可以正常工作,但在未选中该框时它不会做任何事情。我知道代码正在触发,只需放置一个 MsgBox 告诉我,但 If 语句不会启动。见以下代码:

Sub Chase_Visa_Click()
    'Check new button status for action.
    If Sheets("<Sheet Name>").Shapes("<CheckBox Name>").OLEFormat.Object.Value = 1 Then
        MsgBox ("Box checked.")
    ElseIf Sheets("<Sheet Name>").Shapes("CheckBox Name>").OLEFormat.Object.Value = 0 Then
        MsgBox ("Box unchecked.")
    End If
End Sub

根据我的阅读,unchecked 的值为 0。我也尝试过诸如“.Checked = False”之类的东西。非常感谢您的帮助。

【问题讨论】:

  • 为什么使用ElseIf 而不是简单的Else
  • 我曾考虑过这一点,但希望非常具体。我想我只是因为开放式的结局而感到害怕......如果我不能很快弄清楚这一点,我肯定会这样做,但我仍然很好奇为什么“0”不起作用。感谢您的建议。
  • 看起来确实有些神秘。也许有简单的点击代码MsgBox Sheets("&lt;Sheet Name&gt;").Shapes("CheckBox Name&gt;").OLEFormat.Object.Value 看看这个值是什么。
  • MSForms 的 MSDN help 表明 Value 属性将是 -1 或 True 表示选中,0 或 False 表示未选中,Null 表示既不选中也不选中
  • 现象思维@JohnColeman!所以事实证明,未经检查的值是“-4146”,它模糊地敲响了警钟。现在我知道了答案,事实证明我已经在这个问题中看到了它,但我无法通过谷歌搜索正确的答案:stackoverflow.com/questions/11741836/…。我讨厌我创建了一个重复的问题......但它就在这里,它会从答案中受益,所以你想发布它,因为是你的伟大想法让我们到达那里吗?

标签: excel checkbox vba


【解决方案1】:

正如上面 John Coleman 所建议的,只是显示的值

Sheets("<Sheet Name>").Shapes("<CheckBox Name>").OLEFormat.Object.Value

指出“-4146”是未选中 CheckBox 的值。

对于任何超级初学者,我选择的获取价值的方法是

MsgBox(Sheets("<Sheet Name>").Shapes("<CheckBox Name>").OLEFormat.Object.Value)

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2013-10-09
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多