【发布时间】:2016-05-05 09:21:32
【问题描述】:
我正在使用 Excel 2007,我在同一个工作表中有两个表,比如说 tab1 和 tab2。 tab1 通过与 MS-SQL 服务器的连接填充,tab2 包含一些引用 tab1 单元格的公式,我用它来创建一些对图表和其他东西有用的值。问题是每次刷新数据连接时 tab1 都会更改它的行数,我希望 tab2 能够反映这种变化。
我尝试使用 OFFSET 函数并引用 tab1 来声明 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 改变了它的值并且一切正常(表格改变了它的行数),但是当我做 @ 987654324@ 方法无法按预期工作。我放了一个MsgBox 来捕获计算的范围,我注意到看起来像这样的Refresh 方法或 tab1 的“刷新”,其中导入了新数据,它在Sub 的结尾,而不是当我在代码中触发 Refresh 时。我怀疑这是因为 MsgBox 中显示的范围始终是 Refresh 的前一个,因此反映了 Refresh 之前 tab1 的实际大小.例如,如果现在 tab1 在第 10 行结束并且我触发了宏,则 MsgBox 显示为 10,但在刷新后表格结束到第 15 行;如果我再次触发宏,MsgBox 会显示 15,但刷新后表格结束到第 12 行......等等。
我错过了什么?
这是我想出相应地调整 tab2 大小的唯一方法 tab1。
编辑:
我还尝试将Resize 部分放在另一个子中,并在Refresh 之后调用此子,但没有任何变化。
任何帮助表示赞赏
埃托雷
【问题讨论】: