Просто удалите эту строку. Когда вы удаляете каждый QueryTable, вы уже удаляете его именованный диапазон. Следовательно, ваш вызов Worksheets("hs").Names("ExternalData_1").Delete
является избыточным и выдает ошибку, поскольку объект Name не существует. Если бы вы завернули функцию в правильную обработку ошибок, ошибка вызвала бы:
Ошибка приложения или объекта
Чтобы проверить, запустите цикл диапазона Name
сразу после цикла QueryTables
. Снизу вы увидите, что только один «ExternalData_1» будет печататься с Debug.Print
.
Dim qt As QueryTable, RngName As Name
For Each qt In Worksheets("hs").QueryTables
Debug.Print qt.Name ' "ExternalData_1" WILL PRINT
qt.Delete
Next qt
For Each RngName In Worksheets("hs").Names
Debug.Print RngName.Name ' "ExternalData_1" WILL NOT PRINT
Next RngName
В качестве альтернативы, вы можете проверить после запуска кода без строки выше в Лента> Формулы> Диспетчер имен (в разделе Определенные имена) (может отличаться на Mac), и увидеть, что «ExternalData_1» отсутствует в списке.