在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
那为什么这个“更好”?
- 你不必“猜测”会有多less值。
- 如果你改变一个CheckBox的名字,这个脚本仍然可以工作。
- 这将检查空单元格。
另外请注意,我用curCellValue = ActiveSheet.Cells(i, 3).Value
replace了Set CurCell = ActiveSheet.Cells(i, 3)
。 您不需要在每次迭代中Set
一个对象。 填充variables就足够了。
但是:这将检查所有包含checkbox,文本框等的msoOLEControlObject
。
HTH。