我有一个表,它由一个到PostgreSQL数据库的ODBC连接填充。此连接的查询具有一个参数,该参数连接到工作表中单元格的值。在查询运行并刷新表之后,我想将数据集复制到新工作表,每次表刷新时附加新数据集。问题是我创建的VBA循环没有停留足够长的时间,以便每次增加参数时表都会刷新。我尝试在我的脚本中刷新连接,然后使用' doevents'让Excel迎头赶上。不行。发生的事情是VBA运行第一个查询,然后简单地复制结果数据集超过必要的次数以满足循环。它不会每次刷新数据。因此,我得到一个工作表,第一次重复数据复制5或6次,等等。
这是我的剧本:
Sub auto_increment()
Dim i As Integer
Dim d As Integer
Dim wb As Workbook
Dim r As Integer
Set wb = Application.Workbooks("Competitiveness Summary_any date")
d = wb.Sheets("data").Range("AS2").Value
With wb
For i = 1 To d
.Sheets("data").Range("AQ4").Formula = "=workday(AQ2," & i & ",Holidays!D1:D8)"
.Worksheets("data").Select
ThisWorkbook.Connections("query from Tigris_fulfillment5").Refresh
DoEvents
r = .Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Sheets("data").Range("Table_ExternalData_1").Copy
.Sheets("Sheet2").Select
.Sheets("Sheet2").Range("A" & r).Select
ActiveSheet.Paste
Next i
End With
End Sub
变量' d'表示两个日期之间的工作日数。我想将参数单元格增加工作日数。总而言之,我试图在两个日期之间创建一个旧数据的平面文件。本查询仅用于一次返回一天的数据。
非常感谢任何协助。
答案 0 :(得分:1)
关闭连接属性选项卡上的“启用后台刷新”,然后删除DoEvents
行。
您希望不在查询运行时使用Excel。您希望Excel在查询完成之前“停止”,以便在您执行Refresh
代码时等待。