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

我正在尝试使用IF子句来确定我的checkbox(名为“checkbox1”)是否被选中,以便在我的程序中进一步使用。

我目前的代码:

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

这似乎不工作,但debugging告诉我有一个问题

  ActiveSheet.Shapes("Check Box 1") 

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

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

编辑:如果需要更多的信息,我的checkbox(在我的网页上有200个)位于sheet1,名称为“Demande”。 并且每个checkbox都具有相同的格式名称“checkbox…”。

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

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

这是你正在尝试?

 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 

Activesheetreplace为相关的工作表名称。 同时用相关的checkbox名称replaceCheck Box 1

基于以前的 答案 ,您可以利用True为-1和False为0这一事实,并缩短代码,如下所示:

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

如果checkbox被选中, .Value = 1。

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

应用Abs函数将True转换为1

如果checkbox未选中, .Value = -4146。

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

应用Abs函数将False转换为0

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