循环工作表命令按钮并更改可见性

时间:2013-06-11 07:03:00

标签: vba

我正在尝试编写一个代码,根据单元格值显示多个按钮

我有10个命令按钮都是不可见的,我只想显示第一个x  x是“Sheet1”中单元格“A1”的值(将从1到10)  命令按钮名称是默认名称(CommandButton4,CommandButton5,...,CommandButton13)

注意:我正在处理工作表而不是用户表单

这是我的代码,但我需要更短,更专业和更有效的

Private Sub CommandButton15_Click()
    Dim i As Long
    Dim CommandButton() As Variant

    Application.ScreenUpdating = False

    CommandButton = Array("CommandButton4", "CommandButton5", "CommandButton6", "CommandButton7",     "CommandButton8", "CommandButton9", "CommandButton10", "CommandButton11", "CommandButton12", "CommandButton13")

    For i = LBound(CommandButton) To LBound(CommandButton) + Sheet1.Range("A1").Value - 1

        Sheet1.Shapes(CommandButton(i)).Visible = True

    Next i

    Application.ScreenUpdating = True

End Sub

需要你的帮助PLZ

1 个答案:

答案 0 :(得分:2)

如评论中所述,您应该重命名按钮。这只会让事情变得更容易。

例如,你可以将它们命名为“btn1”,“btn2”,“btn3”.... 你的代码还可以,我看不到重大错误。我不知道你以后是否想要添加新按钮。

如果是这样,我会推荐更通用的东西。如果您将按钮重命名为“btn1”...那么您可以使用以下内容:

Private Sub CommandButton15_Click()
Dim btn As OLEObject, name As String, i As Long
i = Sheets(1).Range("A1").Value + 1
For Each btn In ActiveSheet.OLEObjects
    name = btn.name
    If btn.OLEType = xlButtonOnly And InStr(name, "btn") = 1 Then
        If Int(Right(name, Len(name) - 3)) < i Then
            btn.Visible = True
        Else
            btn.Visible = False
        End If
    End If
Next
End Sub

所以你可以添加新的按钮,用“btn ..”模式命名它们,你不必更改你的代码。