在Connection.Refresh- excel

时间:2016-05-05 09:21:33

标签: excel excel-vba vba

我正在使用Excel 2007,我在同一个工作表中有两个表,让我们说 tab1 tab2 。通过与MS-SQL服务器的连接填充 tab1 tab2 包含一些引用 tab1 的某些单元格的公式,我用它来创建一些对图形和其他东西有用的值。问题是 tab1 每次刷新数据连接时都会改变行数,我希望 tab2 能够反映这一变化。
我尝试使用引用 tab1 OFFSET函数来声明 tab2 的范围,这在声明期间有效,但是当 tab1 更改, tab2 不要...所以我认为表格声明中指定的范围不能动态变化。
由于我刷新了通过VBA填充 tab1 的连接数据,因此尝试使用VBA调整 tab2 的大小。我做这样的事情:

With ActiveWorkbook.Connections("conn_name")
   .OLEDBConnection.CommandText = query 'query previously set
   .Refresh
End With
range_calculated = ....
' MsgBox range_calculated
With ActiveWorkbook.WorkSheets(name_sheet)
   .ListObjects(name_table_to_refresh).Resize Range(range_calculated)
End With

为了找到 tab2 的最后一行,我使用了这样的东西:

last_row_tab2 = .ListObjects("tab1").range.Rows.Count + .ListObjects("tab1").range.Row - 1

并且对于第一列和最后一列以及第一行,我使用了类似的东西。

现在, Connection.Refresh 正常工作,因为 tab1 更改了它的值,一切正常(表格改变了它的行数) ),但是当我使用Resize方法时,它并没有按预期工作。我放了一个MsgBox来捕捉被计算的范围,我注意到的是那个或Refresh方法或者"刷新" tab1 导入的新数据在Sub的末尾执行,而不是在代码中触发Refresh时。我怀疑这是因为 MsgBox 中显示的范围始终是Refresh的前一个,所以反映 tab1 Refresh之前。例如,如果现在 tab1 在第10行结束并且我触发宏,则 MsgBox 显示10,但是在刷新之后,表结束到第15行;如果我再次触发宏, MsgBox 显示15但刷新后表格结束到第12行......依此类推。
我错过了什么?
这是我想要重新调整 tab2 的唯一方法 tab1

修改
我还尝试将Resize部分放在另一个Sub中,并在Refresh后调用此子,但没有更改。

任何帮助表示赞赏

埃托

1 个答案:

答案 0 :(得分:0)

最后我发现了这个问题并且想分享解决方案 事实上,在VBA代码中触发时未执行Refresh但稍后,这是因为启用了连接的选项启用后台刷新。禁用此选项允许VBA代码执行imediatly查询(来自Office support):

  

启用后台刷新选中此复选框可在后台运行查询。清除此复选框可在您等待时运行查询。在后台运行查询使您可以在查询运行时使用Excel。

因此,禁用该选项解决了问题。