我有一个宏(ApplyFilter),它可以根据我在另一个工作表(Grand Totals)中输入到单元格B1中的日期来筛选许多工作表。该宏是:获取Worksheet_change事件自动执行宏
Sub ApplyFilter() 'Filters all worksheets except worksheet1 for date entered into _
'Grand Totals!B1
Dim WS_Count As Integer
Dim I As Integer
Dim FilterRange As Variant
FilterRange = Range("'Grand Totals'!B1")
' Set WS_Count equal to the number of worksheets in the active
' workbook.
WS_Count = ActiveWorkbook.Worksheets.Count
' Begin the loop.
For I = 2 To WS_Count
Sheets(I).Select
ActiveSheet.AutoFilterMode = False 'Remove any existing filters
Worksheets(I).Range("A2").AutoFilter Field:=1, Criteria1:=Range("'Grand Totals'!B1").Text
Next I
Sheet1.Activate
End Sub
当我手动执行此宏时,它会执行和过滤,因为它应该。但是,当我从另一个子调用此宏时:
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("B1")) Is Nothing Then _
Call ApplyFilter
End Sub
我得到一个“宏”窗口,其中提供了可用的宏列表。我可以选择“ApplyFilter”宏,然后单击“运行”,然后宏按我的意愿执行并过滤工作表。
我发现很多引用来自动执行一个宏,但没有引用“宏”窗口,我现在必须选择要运行的宏。相反,当我在“总计”工作表的单元格B1中输入日期并按回车时,子工作表变量(ByVal Target As Range)应自动调用“ApplyFilter”并将日期过滤器应用于许多工作表。
我创建了一个按钮,并使用Button_Click来调用“ApplyFilter”,并且一切都很好。但是,输入日期并按Enter键执行宏似乎更直观。我可以忍受Button_Click方法,但我首先想学习VBA,而且我只是固执己见,想要学会如何使其工作,而且我不想仅仅为了工作而解决问题。
这应该原样 - 假设你有没有这个代码'子Worksheet_Change(BYVAL目标作为范围)'**里面**'大总计'的表单代码? (右键单击选项卡,查看代码,然后复制并粘贴此事件) – brettdj 2013-03-13 04:42:49