2013-03-13 35 views
2

我有一个宏(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,而且我只是固执己见,想要学会如何使其工作,而且我不想仅仅为了工作而解决问题。

+0

这应该原样 - 假设你有没有这个代码'子Worksheet_Change(BYVAL目标作为范围)'**里面**'大总计'的表单代码? (右键单击选项卡,查看代码,然后复制并粘贴此事件) – brettdj 2013-03-13 04:42:49

回答

2

表代码必须在Grand Totals

  • 右键单击您Grand Totals表标签
  • View Code
  • 确保下面的代码在这里
  • 回Excel
粘贴

个的总计表代码

Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Me.Range("B1")) Is Nothing Then Call ApplyFilter 
End Sub 

更高效过滤器代码

Sub ApplyFilter() 
Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Sheets 
     If ws.Name <> "Grand Totals" Then 
     ws.AutoFilterMode = False 
     ws.Range("A2").AutoFilter Field:=1, Criteria1:=Range("'Grand Totals'!B1").Text 
     End If 
Next 
End Sub 
+0

昨天我在您的网站上进行了研究,发现代码需要在表单代码中,所以我将它放在那里,但它仍然没有没有工作。今天,在我改变代码之前(刚刚删除了继续下划线),就像你说的那样,它跑了!昨天,相同的代码不会运行;也许重新启动和重新加载Excel可以帮助解决问题;我不知道。我当然非常感谢关于“更高效的过滤器代码”的评论,本练习的一部分是了解更多关于VBA的内容。非常感谢。你有一个伟大的网站,在这里;我学到了很多。 – user2161965 2013-03-13 16:06:46