Для каждого запроса, отображаемого на листе, существует автоматически созданное имя в области рабочей книги, которое ссылается на объект ListObject, который отображает результат запроса (просмотрите их в диспетчере имен).Эти ListObject
имеют свойство WorkbookConnection
, имя которого связано с именем Query
.
Если у вас есть запрос с именем скажем MyQuery
(отображается налист) будет ListObject с именем WorkbookConnection Query - MyQuery
.
Если вы посмотрите на диалоговое окно «Существующие соединения» в Excel, то соединения будут перечислены с префиксом «Запрос», но если вы редактируете соединение, свойство name будет доступно для редактирования без этот префикс.При совершении изменения имени префикс добавляется автоматически.Редактирование имени запроса обновляет имя WorkbookConnection, и наоборот.
Вы можете отключить это, чтобы проверить наличие запросов на любом листе
Public Sub EnumerateWorksheetQueries(ws As Worksheet)
Dim lo As ListObject
Dim qt As QueryTable
If ws.ListObjects.Count > 0 Then
For Each lo In ws.ListObjects
Set qt = Nothing
On Error Resume Next
Set qt = lo.QueryTable
On Error GoTo 0
If Not qt Is Nothing Then
Debug.Print ws.Parent.Queries(Mid$(lo.QueryTable.WorkbookConnection.Name, 9)).Name
End If
Next
End If
End Sub
Назовите это как-то так
Sub Demo1
EnumerateWorksheetQueries ActiveSheet
End Sub
Или
Sub Demo2()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print "Queries on " & ws.Name
EnumerateWorksheetQueries ws
Next
End Sub
Примечание: одна ошибка, имя по умолчанию объекта ListObject также связано с запросом, но может быть изменено пользователем.При изменении имени ListObject имена Query и WorkbookConnection НЕ обновляются.