Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在工作簿关闭时重新应用筛选器的问题_Vba_Excel - Fatal编程技术网

Vba 在工作簿关闭时重新应用筛选器的问题

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读取该数据并对其进行过滤。然后,文档将使用

我在ThisWorkbook部分中有以下代码:

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自己做,反过来,它应该能够在该点应用过滤器。有趣的想法,将测试这一点。