【问题标题】:VBA to add new row to query table within loopVBA在循环内向查询表添加新行
【发布时间】:2020-05-19 08:52:02
【问题描述】:

我有一个 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

我想要做的是在表格刷新后,在每个表格的底部添加一个新行,其中包含第一列中的当前日期。我尝试使用下面的代码,然后在循环中调用它,但我遇到了各种我不太理解的错误。每个表的列数完全相同,但行数会根据参数的变化而变化。

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 做什么

【问题讨论】:

  • Tbl 未定义。您正在为您的列表对象使用lo
  • 你能分享一下你所面临的错误的快照吗?
  • @salsinga 我添加了一个弹出的主要错误示例
  • @BigBen 是的,对不起,那是我的错误,我还在不断地发现错误
  • newrow 代码块在您的主代码块中的什么位置?

标签: excel vba loops listobject


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多