【发布时间】:2016-02-13 05:26:13
【问题描述】:
我有两张表,一张只是位置列表,另一张是通过 MS Query 查询连接到数据库的结构化数据表。在我的结构化数据表中,我有一个从位置列表中提取的参数设置,每次将新位置输入参数并刷新数据表时,我应该根据新位置获取一组新数据。
我正在尝试构建的是一个 VBA 循环,它遍历每个位置,通过参数将该位置提供给数据表,然后刷新数据表以反映更改。最终每次刷新后,我想将新的数据表保存在它自己的工作簿中,但我必须爬才能走路,所以我只解决刷新问题。
这是我尝试过的:
Sub Macro1()
Dim WS As Worksheet
Dim CT As Variant
Dim MSG As String
Set WS = Sheets("Sheet1")
CT = Range("A1").CurrentRegion
For i = 2 To UBound(CT, 1)
MSG = ""
For J = 1 To UBound(CT, 2)
Range("$D$2").Value = CT(i, J)
ActiveWorkbook.Connections("Query from Database").Refresh
Sheets("Sheet2").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Next J
Next i
End Sub
这导致我在数据表中的一些数据闪烁,但没有改变。
我也尝试只刷新连接而不是整个表,这似乎可以很好地刷新连接,但显然没有更新数据表。如何让表格本身在每个循环中刷新?
编辑:
基于更多的修补,我重做了上面的一些代码,但我仍然收到一些问题。代码循环遍历位置列表,并将当前位置放置在第一个工作表的单元格 $D$2 中(紧邻位置列表)。从这里开始,数据库查询和表应该刷新,但是当我通过点击转义符跳出 VBA 代码时,表只显示刷新结果。例如,它将遍历列表,循环的每次迭代都会在单元格 $D$2 中放置一个新位置,每次迭代数据表都应根据 $D$2 中的值刷新。发生的情况是 $D$2 在每个循环中都填充了一个新值,但是数据表只是保持空白,如果我按转义键停止宏,数据表将填充 $D$2 中最后一个值。每次循环后如何让数据表刷新?
Sub Macro1()
Dim WS As Worksheet
Dim WS2 As Worksheet
Dim CT As Variant
Dim MSG As String
Set WS = Sheets("Sheet1")
Set WS2 = Sheets("Sheet2")
CT = Range("A1").CurrentRegion
For i = 2 To UBound(CT, 1)
MSG = ""
For J = 1 To UBound(CT, 2)
WS.Range("$D$2").Value = CT(i, J)
Exit For
Next J
ActiveWorkbook.Connections("Query from Database").Refresh
WS2.ListObjects(1).Refresh
Next i
End Sub
【问题讨论】:
-
手动刷新时参数如何传入查询中?
-
@ScottHoltzman 每次我遍历位置列表时,它都会将当前位置名称放在列表旁边的单元格中。从这里数据表查看该单元格的参数值。如果我手动点击刷新,该单元格中的任何位置都会导致数据表相应地刷新。