VBA для добавления новой строки в таблицу запросов в цикле - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть книга Excel, содержащая ~ 100 SQL таблиц соединений, которые находятся на отдельных листах и ​​обновляются каждую неделю. Мой текущий код представляет собой циклический макрос (ниже), который проходит через каждый лист и обновляет каждую таблицу.

Sub RefreshLoop()

Dim wks As Worksheet
Dim qt As QueryTable
Dim lo As ListObject

For Each wks In ActiveWorkbook.Worksheets

    For Each lo In wks.ListObjects
        If lo.SourceType = 3 Then
            With lo.QueryTable
                .BackgroundQuery = False
                .Refresh
            End With
        End If

    Next lo

    For Each qt In wks.QueryTables
        qt.Refresh BackgroundQuery:=False
    Next qt

Next wks

Set qt = Nothing
Set wks = Nothing

End Sub

Я пытаюсь сделать, как только таблица обновится, добавить новую строку в нижняя часть каждой таблицы, которая содержит текущую дату в первом столбце. Я попытался использовать приведенное ниже, а затем вызвать это в l oop, но у меня возникают всевозможные ошибки, которые я не совсем понимаю. В каждой таблице одинаковое количество столбцов, но с разными строками в зависимости от изменения параметра.

Dim newrow As ListRow

Set newrow = lo.ListRows.Add(AlwaysInsert:=True)

With newrow
   .Range(1) = Date
End With

Пример ошибки;

 Run-time error '91':
 Object variable or With block variable not set

Я изо всех сил пытаюсь получить мой Обдумайте, что мне нужно сделать, используя Excel 2019

1 Ответ

0 голосов
/ 03 февраля 2020
Sub RefreshLoop()

Dim wks As Worksheet
Dim qt As QueryTable
Dim lo As ListObject

For Each wks In ActiveWorkbook.Worksheets

    For Each lo In wks.ListObjects
        If lo.SourceType = 3 Then
            With lo.QueryTable
                .BackgroundQuery = False
                .Refresh
            End With
        End If
        If lo.ListRows.Count = 0 Then
            lo.ListRows.Add.Range(1) = "No instances of this read code."
        End If

        lo.ListRows.Add.Range(1) = Date
    Next lo

    For Each qt In wks.QueryTables
        qt.Refresh BackgroundQuery:=False
    Next qt

Next wks

Set qt = Nothing
Set wks = Nothing

End Sub
...