如何用VBA无需选中刷新veryHidden工作表中的QueryTable
解决VBA刷新隐藏工作表中QueryTable的问题
错误原因分析
你遇到的运行时错误438,主要是两个问题导致:
- ListObject的引用错误:你直接写
Abfrage_von_Planung会被VBA识别为未定义变量,需要用字符串引号包裹名称; - 目标工作簿指向错误:要刷新另一个工作簿的内容,不能用
ThisWorkbook(当前代码所在工作簿),必须明确指定目标工作簿。
另外说明:veryHidden状态的工作表不影响代码直接访问,无需先取消隐藏。
正确代码示例
情况1:目标工作簿已打开
Sub MakroRefreshPlanung() Dim targetWB As Workbook Dim targetWS As Worksheet Dim targetLO As ListObject ' 替换为你的目标工作簿文件名(需已打开) Set targetWB = Workbooks("目标工作簿.xlsx") ' 指定veryHidden工作表 Set targetWS = targetWB.Sheets("Abfrage von Planung") ' 按ListObject的名称引用(注意引号包裹) Set targetLO = targetWS.ListObjects("Abfrage_von_Planung") ' 执行刷新 targetLO.QueryTable.Refresh BackgroundQuery:=False End Sub
情况2:目标工作簿未打开
Sub MakroRefreshPlanung() Dim targetWB As Workbook Dim targetWS As Worksheet Dim targetLO As ListObject Dim filePath As String ' 替换为目标工作簿的完整路径 filePath = "C:\你的文件路径\目标工作簿.xlsx" ' 打开工作簿 Set targetWB = Workbooks.Open(filePath) Set targetWS = targetWB.Sheets("Abfrage von Planung") Set targetLO = targetWS.ListObjects("Abfrage_von_Planung") targetLO.QueryTable.Refresh BackgroundQuery:=False ' 可选:刷新后保存并关闭工作簿 ' targetWB.Save ' targetWB.Close End Sub
额外注意事项
- 确保工作表名称
"Abfrage von Planung"和ListObject名称"Abfrage_von_Planung"完全匹配(大小写、空格、特殊字符都要一致); - 如果你的QueryTable不属于ListObject(是独立的查询表),可以直接用
targetWS.QueryTables("查询名称").Refresh替代ListObject的引用。
内容的提问来源于stack exchange,提问作者Charly
相关产品推荐
相关产品推荐

