Vba 在工作簿关闭时重新应用筛选器的问题
我在ThisWorkbook部分中有以下代码:Vba 在工作簿关闭时重新应用筛选器的问题,vba,excel,Vba,Excel,我在ThisWorkbook部分中有以下代码: Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheet("Sheet2").AutoFilter.ApplyFilter ActiveWorkbook.Save ThisWorkbook.Saved = True End Sub 我假设第二行将重新应用我在第2页的自动过滤器中设置的过滤器 我将数据输入到工作表1中,工作表2读取该数据并对其进行过滤。然后,文档将使用
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheet("Sheet2").AutoFilter.ApplyFilter
ActiveWorkbook.Save
ThisWorkbook.Saved = True
End Sub
我假设第二行将重新应用我在第2页的自动过滤器中设置的过滤器
我将数据输入到工作表1中,工作表2读取该数据并对其进行过滤。然后,文档将使用自动热键:打开、获取更多数据、保存和关闭计时器。我只需要它,当文档关闭时,它会查看Sheet2上的过滤器并重新应用它
我试过:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheet2.AutoFilter.ApplyFilter
ActiveWorkbook.Save
ThisWorkbook.Saved = True
End Sub
但这并不奏效。在浏览了一些VBA内容之后,它似乎将Sheet2.AutoFilter.ApplyFilter
更改为Sheet(“Sheet2”)。AutoFilter.ApplyFilter
就可以了。但现在我只得到编译错误:子或函数未定义。Sheet(“Sheet2”).AutoFilter.Applyfilter
应该是Sheets(“Sheet2”).AutoFilter.Applyfilter
(缺少“s”)<代码>工作表不是VBA可以识别的东西,所以它认为这是您在其他地方定义的子例程或函数<代码>工作表()然而,这正是您需要的
Sheet2.[which]
在VBA中确实有应用程序,但是它不一定要引用名为“Sheet2”
的工作表<代码>工作表2指在工作簿中创建的第二个工作表。如果您创建三张工作表,并将它们重命名为“有趣的第1页”、“有趣的第4页”、“有趣的第8页”、Sheet2。自动筛选…
将在您第二次创建的任何工作表上运行(可能是名为“有趣的第4页”的工作表)
通过使用工作表(“有趣的第4页”).AutoFilter…
,代码告诉VB查找名为“有趣的第4页”的工作表,而不是创建第1页、第2页等的工作表
这有道理吗?很有道理。我成功地保存了工作簿,没有错误。我需要等待新数据加载,然后才能确定此问题是否得到解决。非常感谢。一旦我确认,将标记为已回答。。。。还有,愚蠢的S…我发现最大的问题显然是我的自动热键脚本。我在AHK中使用一个命令来关闭工作簿,这样做似乎不会像用户关闭一样关闭工作簿。如果我手动关闭工作簿,您所做的更改将起作用。@Aldentec,您可以将相同的代码添加到您的AHK close命令中,我认为这样做可以满足您的需要。只是好奇,您知道一种简单的方法,可以在打开工作簿20秒后关闭工作簿吗?如果我能做到这一点,我可以从AHK脚本中删除该部分,并允许Excel自己做,反过来,它应该能够在该点应用过滤器。有趣的想法,将测试这一点。