首页 > 解决方案 > VBA 动态表 (ListObject)

问题描述

所以,经过一些研究,我在某处遗漏了一些东西......首先,我将我的 SQL 记录集链接到我的电子表格,所以我设法从单元格“B21”开始获取 9999 行和 16 列。为此,我用这段代码创建了一个名为“MyScreener”的表:

Sub Create_Table()

    Dim Rn As Range
    Set Rn = shtEquity.Range("B21").CurrentRegion
    Dim tbl As ListObject
    Set tbl = shtEquity.ListObjects.Add(xlSrcRange, Rn, xlYes)
    With tbl
        .Name = "MyScreener"
        .TableStyle = "TableStyleMedium18"
    End With

End Sub

很酷,所以现在我有一个新列要添加到我的表中,我尝试了一些类似这样的代码,例如:

Dim tbl As ListObject
Dim lrow As Integer
Dim lcol As Integer

Set tbl = shtEquity.ListObjects("MyScreener")

lrow = tbl.Range.Rows.count
lcol = tbl.Range.Columns.count

tbl.Resize tbl.Range.Resize(lrow, lcol)

这个编译但什么都不做,给出 lrow = 9980 和 lcol = 16 这显然没有考虑到我的最后(第十七)列。

有没有人可以提供一个提示来创建一个在我获取新请求时动态更新自身的表?像每个请求一样,SQL 发送新的行数,并且由于它已经与我的电子表格链接,因此电子表格中的表也可以更新。

希望我的解释足够清楚。

提前感谢您的关注!

标签: sqlexcelvbaobject

解决方案


我有点困惑。通常,如果您已经在表格中添加了一列,它将调整大小。

如果此代码是先扩大表格以创建一个额外的列,那么您必须将一 (1) 添加到当前列数。

所以:

   tbl.Resize tbl.Range.Resize(lRow, lCol + 1)

顺便说一句,您应该将 lrow 和 lcol 声明为 Long 而不是 Integer。

Integer 会将您的行数限制为 32767,并且在内部,整数无论如何都会转换为 Longs。


推荐阅读