Cas*_*sey 3 excel vba click double-click
我有一个数据库,其类别标题包含.Interior.Color和.Font格式,当单击类别标题单元格时,它将应用于选定的行.
我想添加一个功能,当双击类别标题单元格时,文档中与该类别不匹配的所有行都将被隐藏.
我在Sheet1(代码)中添加了以下内容:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, HideRow As
Boolean)
If Not Application.Intersect(Target, Range("C1:W1")) Is Nothing Then
LstRow = Cells.Find(What:="*", After:=Range("A1"), lookat:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, MatchCase:=False).Row
'Finds last row with data
Set Dyn_AllEntries = ActiveSheet.Range("C5:C" & LstRow) 'range w/ all data
If HiddenRows <> True Then 'Checks to see if the macro was already run
For Each cl In Dyn_AllEntries
If cl.Offset(0, 11) <> Target Then 'check if category matches
cl.EntireRow.Hidden = True 'if not, hide row
End If
Next cl
HiddenRows = True 'set boolean, to verify the macro is active
ElseIf HiddenRows = True Then 'check if macro is active
For Each cl In Dyn_AllEntries
If cl.Offset(0, 11) <> Target And LCase(cl.Offset(0, -2)) <> _
"true" Then 'if category not match & row not hidden by other macro
cl.EntireRow.Hidden = False 'unhide row
End If
Next cl
HiddenRows = False 'set boolean so I know macro isn't active
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,我选择单元格时编写的代码在编译时给出了一个错误:
过程声明与具有相同名称的事件或过程的描述不匹配.
我的"单击"代码被命名Private Sub Worksheet_SelectionChange(ByVal Target As Range, HideText As Boolean),我的"双击"代码被命名Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, HideRow As Boolean).
两者都在Sheet1(代码)模块中.我的"单击"代码没有改变,因为它在我添加"双击"代码之前工作.
对于不同的选择操作,是否不可能运行同一单元格的两个不同的宏?
您无法随意更改事件处理程序签名 - 这不是事件的工作方式.
工作表事件在某个WorksheetEvents界面中定义,方法签名就是它们,并且它们是一成不变的:事件源(即工作表)是提供参数值的 - 工作表将如何知道提供什么值对于这个HideRow论点?它不会,因为Worksheet你所在的模块是从Worksheet类中继承它的成员,如果你Worksheet_BeforeDoubleClick在工作表模块中命名一个过程,那么因为VBA不支持方法重载,唯一的方法是编译它是该程序具有与其定义的完全*相同的签名.
使事件处理程序签名与它们预期具有的签名相匹配,代码将再次编译.
*几乎:参数名称并不重要 - 它们的类型和顺序确实如此.