隐藏基于单元格值excel vba的命令按钮

时间:2017-09-18 13:21:21

标签: excel vba hide commandbutton

我试图根据特定的单元格值隐藏命令按钮。我查找了几个代码并将它们粘贴到excel中(右键单击工作表并选择“查看代码”时,以vba形式)。

我做错了什么?

这是我尝试过的代码之一:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("A1") = 0 Then ActiveSheet.CommandButton1.Visible = False
If Range("A1") = 1 Then ActiveSheet.CommandButton1.Visible = True
End Sub

4 个答案:

答案 0 :(得分:0)

确保在使用代码之前启用事件。此外,您必须将代码放在Worksheet模块中,而不是常规模块中。要启用事件,请使用此简单子。

Sub Enable_events()
Application.EnableEvents = True
End Sub

答案 1 :(得分:0)

请先运行:

Sub enable_()
Application.EnableEvents = True
End Sub

然后您的代码将完美运行:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("A1") = 0 Then ActiveSheet.CommandButton1.Visible = False
If Range("A1") = 1 Then ActiveSheet.CommandButton1.Visible = True
End Sub

答案 2 :(得分:-1)

请尝试以下代码:

gridview1.optionsselection.multiselect = True
gridview1.optionsselection.multiselectMode = cellselect   

希望得到这个帮助。

答案 3 :(得分:-1)

由于多种原因,您的代码令人困惑。

Range,当它不符合Worksheet对象时,隐含地引用ActiveSheet,即ActiveSheet.Range ...但是当它出现在工作表的代码隐藏中时,它隐含地指工作表的 Range属性,即Me.Range。由于非限定Range调用的含义取决于上下文,因此最好始终使用显式Worksheet对象对其进行限定。

因此,如果您使用Sheet1的代码隐藏模块,则Range("A1")相当于Sheet1.Range("A1"),甚至更好,Me.Range("A1")

每次都会评估这两个条件,但只有一个条件需要:它效率低下。

事实是,您不需要指定Boolean字面值 - 布尔表达式更清晰。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Me.CommandButton1.Visible = (Me.Range("A1") = 1)
End Sub

现在,假设Application.EnableEvents返回True,每次选择更改时,该代码都会运行,这相当过分。

处理Worksheet.Change事件,仅在修改后的单元格为A1时执行:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Application.Intersect(Target, Me.Range("A1")) Is Nothing And Target.Count <> 1 Then
        ' we don't care about that cell: bail out
        Exit Sub
    End If

    Me.CommandButton1.Visible = (Me.Range("A1") = 1)

End Sub