复选框名称

时间:2016-07-06 12:44:17

标签: excel vba excel-vba

我正在尝试创建一个在每个非空行中都有一个复选框的工作表。要自动调整我创建此宏的复选框数量:

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名称 - 我使用上面的代码时出错了。有人可以帮忙吗?

1 个答案:

答案 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;?

  1. 你不必猜测&#34;会有多少价值。
  2. 如果您更改了CheckBox的名称,则此脚本仍然有效。
  3. 检查单元格。
  4. 另请注意,我将Set CurCell = ActiveSheet.Cells(i, 3)替换为curCellValue = ActiveSheet.Cells(i, 3).Value。在每次迭代中,您都不需要Set一个对象。填充变量就足够了。

    但是:这将检查所有msoOLEControlObject,其中包括复选框,文本框等。

    HTH。