我试图根据特定的单元格值隐藏命令按钮。我查找了几个代码并将它们粘贴到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
答案 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