22

我正在尝试使用 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”。每个复选框都具有相同的格式名称“复选框...”。

4

5 回答 5

29
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 混合(灰色框)

于 2012-07-31T14:43:56.040 回答
11

这是你正在尝试的吗?

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

于 2012-07-31T14:33:32.357 回答
4

前面的 答案True的基础上,您可以利用-1 和0的事实False并像这样缩短代码:

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函数转换True1.

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

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

应用Abs函数转换False0.

于 2012-07-31T20:27:11.617 回答
2

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

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

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

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

于 2019-09-18T01:52:22.120 回答
-2

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

于 2012-07-31T14:08:56.763 回答