多个ActiveX按钮可见/隐藏

时间:2018-10-04 17:43:23

标签: vba

我在excel 2013中有一个工作表,上面有25个activex按钮。根据每个按钮的单元格值,我希望它是可见的或隐藏的。在我的情况下,单元格U6的值使我的commandbutton1可见,U7将使commandButton2可见。...仅我的CommandButton1正常工作。我尝试了不成功的不同代码组合。

    Private Sub CommandButton1_Click()
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
    'ActiveX button1
       If Range("U6") = 1 Then
        Sheets("Feuil1").CommandButton1.Visible = True
    Else
        Sheets("Feuil1").CommandButton1.Visible = False
      End If

   End Sub

1 个答案:

答案 0 :(得分:2)

If Range("U6") = 1 Then

不是应该检查Target(即修改后的单元格)是否在U列中吗?

Sheets("Feuil1").CommandButton1.Visible = True

那条通向田园的道路,您不想去那里:提取一种方法。您将需要查询OLEObjects集合以按名称获取ActiveX控件,而不是将按钮名称硬编码25次以上。

Private Sub SetControlVisibility(ByVal controlName As String, ByVal isVisible As Boolean)
    Dim axControl As OLEObject
    On Error Resume Next 'next statement may throw error #9
        Set axControl = Me.OLEObjects(controlName)
        If axControl Is Nothing Then Exit Sub
    On Error GoTo 0 'restore error handling
    axControl.Object.Visible = isVisible
End Sub

现在,有了一种方法,可以切换工作表上任何ActiveX控件的可见性(给定名称)。

因此,在Worksheet_Change处理程序中,您现在只需要计算ActiveX控件的名称以及是否希望它可见:

Private Sub Worksheet_Change(ByVal Target As Range)
    'bail out if the modified cell isn't interesting, or if it's more than 1 cell:
    If Intersect(Target, Me.Range("U6:U31") Is Nothing  Or Target.Count <> 1 Then Exit Sub

    Dim buttonName As String
    buttonName = "CommandButton" & Target.Row - 5

    Dim isVisible As Boolean
    isVisible = Target.Value = 1

    SetControlVisibility buttonName, isVisible
End Sub

或类似的东西。注意:在答案框中编写的代码未经测试,仅供说明。复制粘贴由您自担风险。