表参数传递给查询后刷新,ODBC刷新

时间:2014-10-30 15:59:16

标签: excel vba postgresql excel-vba odbc

我有一个表,它由一个到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'表示两个日期之间的工作日数。我想将参数单元格增加工作日数。总而言之,我试图在两个日期之间创建一个旧数据的平面文件。本查询仅用于一次返回一天的数据。

非常感谢任何协助。

1 个答案:

答案 0 :(得分:1)

关闭连接属性选项卡上的“启用后台刷新”,然后删除DoEvents行。

  

Select this check box to run the query in the background. Clear this check box to run the query while you wait. Running a query in the background enables you to use Excel while the query runs.

您希望在查询运行时使用Excel。您希望Excel在查询完成之前“停止”,以便在您执行Refresh代码时等待。