我正在尝试创建一个在每个非空行中都有一个复选框的工作表。要自动调整我创建此宏的复选框数量:
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.宏检查每行的C列值是否为> 1,如果是真的复选框可见,否则它是隐藏的。
我的问题是我不知道如何将循环计数器“i”放入Shape名称 - 我使用上面的代码时出错了。有人可以帮忙吗?
答案 0 :(得分:1)
我认为这将是一个更优雅的解决方案。
这会遍历ActiveSheet
上的所有形状并检查它们是否为msoOLEControlObject
(有关此问题的详情,请参阅here)。
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
那么为什么这会更好&#34;?
另请注意,我将Set CurCell = ActiveSheet.Cells(i, 3)
替换为curCellValue = ActiveSheet.Cells(i, 3).Value
。在每次迭代中,您都不需要Set
一个对象。填充变量就足够了。
但是:这将检查所有msoOLEControlObject
,其中包括复选框,文本框等。
HTH。