【问题标题】:Excel/Access VBA - Cant get last used row because of query refreshExcel/Access VBA - 由于查询刷新,无法获取最后使用的行
【发布时间】:2017-03-23 08:58:37
【问题描述】:

我正在刷新 Access 上的查询并循环遍历表,但循环超出了刷新 - 所以我没有得到正确的最后一行。

刷新后,a 应该等于 2746,但它返回 1478,这是刷新前的最后一行。

vPath = ThisWorkbook.Sheets(vHome).Range("LogTblFolder")
vFile = ThisWorkbook.Sheets(vHome).Range("LogTblFile")
    Set wb = Workbooks.Open(vPath & vFile)

        Sheets("Main").Select
        ActiveWorkbook.Connections("CTA_DB_Full3").Refresh
        ActiveWorkbook.Connections("CTA_DB_Full3").Refresh

            Call WaitForRefresh(1)
            a = 1:Do Until Sheets("Main").Cells(a, 1).Value2 = "":a = a + 1:Loop
                  vArray = Sheets("Main").Range(Cells(2, 1), Cells(a, 94))

    wb.Close False

Public Function WaitForRefresh(intSeconds As Integer)
Dim dblStart As Double

If intSeconds > 0 Then

    dblStart = Timer()

    Do While Timer < dblStart + intSeconds
    Loop

End If
End Function`

非常感谢您的帮助!!!

【问题讨论】:

  • 我认为如果你关闭 run as background query ,你的代码自然会等待
  • 另外,你可以把databodyrangelistobject放到一个数组中

标签: excel vba ms-access row refresh


【解决方案1】:

这可能是一个开始

Sub x()

    Dim l As ListObject

    Set l = ActiveSheet.ListObjects(1)

    l.QueryTable.BackgroundQuery = False

    Debug.Print l.ListRows.Count
    l.Refresh
    Debug.Print l.ListRows.Count

    varray = l.DataBodyRange.Value

End Sub

【讨论】:

  • 效果很好!做了一个测试,关闭后台查询确实是缺少的部分。非常感谢!
猜你喜欢
  • 2013-04-28
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多