首个Excel宏运行报错:‘名称为xxx的查询已存在’求助
解决Excel宏报错“A query with the name 'xxx' already exists”
错误原因
打开工作簿副本时,原工作簿中的查询对象(Power Query 查询或旧版 QueryTable)已被复制到副本中。宏执行时尝试创建同名查询,因Excel不允许同一工作簿存在重复名称的查询,触发该错误。
解决方案:创建前检查并清理同名查询
根据你使用的查询类型,在宏的导入逻辑前添加检查删除代码:
情况1:使用Power Query工作簿查询
Sub ImportPurchaseOrders() ' 检查并删除同名Power Query查询 Dim existingQry As WorkbookQuery On Error Resume Next Set existingQry = ThisWorkbook.Queries("xxx") ' 替换为你的查询名称 On Error GoTo 0 If Not existingQry Is Nothing Then existingQry.Delete ' 若查询关联了工作簿连接,一并清理(可选) Dim conn As WorkbookConnection On Error Resume Next Set conn = ThisWorkbook.Connections("xxx - 连接") ' 替换为实际连接名 On Error GoTo 0 If Not conn Is Nothing Then conn.Delete End If ' -------------------------- ' 以下是你的原NAV导入代码 ' ... ' -------------------------- End Sub
情况2:使用旧版QueryTable查询
Sub ImportPurchaseOrders() Dim targetWs As Worksheet Set targetWs = ThisWorkbook.Worksheets("你的目标工作表名") ' 替换为实际工作表名 ' 遍历工作表中的QueryTable,删除同名查询 Dim qt As QueryTable For Each qt In targetWs.QueryTables If qt.Name = "xxx" Then ' 替换为你的查询名称 qt.Delete Exit For End If Next qt ' -------------------------- ' 以下是你的原NAV导入代码 ' ... ' -------------------------- End Sub
额外注意:若使用Excel表承载数据
如果导入的数据最终存放在Excel表(ListObject)中,也需要提前清理同名表:
Dim targetTbl As ListObject On Error Resume Next Set targetTbl = targetWs.ListObjects("你的表名") ' 替换为实际表名 On Error GoTo 0 If Not targetTbl Is Nothing Then targetTbl.Delete
关键提示
- 务必将代码中的
xxx替换为你实际使用的查询、连接或表的名称 - 如果宏是通过录制Power Query生成的,可在Power Query编辑器中查看查询的准确名称
- 若清理后仍报错,检查是否有隐藏工作表中存在同名查询
内容的提问来源于stack exchange,提问作者cdealer
相关产品推荐
相关产品推荐

