在checkbox名称中的循环计数器

我试图创build一个工作表,每个非空行都有一个checkbox。 要自动调整checkbox的数量,我创build了这个macros:

Sub checkboxes() Dim i As Integer For i = 9 To 200 Set CurCell = ActiveSheet.Cells(i, 3) If CurCell.Value > 1 Then ActiveSheet.Shapes("CheckBox" & CStr(i)).Visible = True Else ActiveSheet.Shapes("CheckBox" & CStr(i)).Visible = False End If Next i End Sub 

我期望数据不超过200的潜在行数。macros检查每行的C列中的值是否大于1,如果为真,checkbox是否可见,否则它是隐藏的。

我的问题是,我不知道如何把循环计数器“我”进入形状名称 – 我得到了上面的代码错误。 有人可以帮忙吗?

我认为这将是一个更优雅的解决scheme。

这将循环遍历ActiveSheet上的所有形状,并检查它们是否是msoOLEControlObject (请参阅此处了解有关此问题的更多信息)。

 Sub checkboxes() Dim curCellValue as Variant Dim i As Long For i = 1 To ActiveSheet.Shapes.Count If ActiveSheet.Shapes(i).Type = msoOLEControlObject Then curCellValue = ActiveSheet.Cells(i, 3).Value If curCellValue <> "" Then ActiveSheet.Shapes(i).Visible = True Else ActiveSheet.Shapes(i).Visible = False End If End If Next i End Sub 

那为什么这个“更好”?

  1. 你不必“猜测”会有多less值。
  2. 如果你改变一个CheckBox的名字,这个脚本仍然可以工作。
  3. 这将检查单元格。

另外请注意,我用curCellValue = ActiveSheet.Cells(i, 3).Valuereplace了Set CurCell = ActiveSheet.Cells(i, 3) 。 您不需要在每次迭代中Set一个对象。 填充variables就足够了。

但是:这将检查所有包含checkbox,文本框等的msoOLEControlObject

HTH。