我有两个表,一个是位置列表,另一个是通过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中(位于列表位置旁边)。从这里开始,数据库查询和表应该刷新,但是当我通过命中escape来打破VBA代码时,表只显示刷新结果。例如,它将循环遍历列表,循环的每次迭代将在单元$ D $ 2中放置一个新位置,每次迭代数据表应根据$ D $ 2中的值刷新。发生了什么是$ D $ 2正在用每个循环填充一个新值,但是数据表只是保持空白,如果我按下escape来停止宏,数据表将填充$ last中的最后值。 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
答案 0 :(得分:0)
代码的问题在于,在使用它们时,不要对对象父项设置任何特定的引用。
特别是你可能会认为这句话Range("$D$2").Value = CT(i, J)
正在你桌子旁边的单元格上发挥作用,但是它在任何表格上的作用都是活跃。
试试这段代码。我可能会针对您的确切情况稍微进行具体的分配,但如果您进行任何必要的调整,整体概念应该会帮助您。
Sub Macro1()
Dim WS As Worksheet
Dim WS2 as Worksheet
Dim CT As Variant
Set WS = Sheets("Sheet1")
Set WS2 = Sheets("Sheet2")
CT = WS.Range("A1").CurrentRegion
For i = 2 To UBound(CT, 1)
For J = 1 To UBound(CT, 2)
With WS2
.Range("$D$2").Value = CT(i, J)
.ListObjects(1).Refresh
End With
Next J
Next I
End Sub