获取Excel VBA表格列的范围(或值)

5
我正在尝试使用VBA代码获取Excel表格中第二列的单元格范围,并在用户表单初始化时自动更新此范围,以便每当有新条目添加到表格中时都能更新。起初我认为这很容易,但现在我完全迷失了方向,无法让我的代码正常运行。可能是我漏掉了什么。
我在论坛上搜索并找到了两种可能的解决方案,第一种是:
Sub test()
    Dim table As ListObject
    Set table = ActiveSheet.ListObjects("Table1")
    Debug.Print table.ListColumns(2).Range.Rows.Count
End Sub

这段代码有些可用。每次运行它都能成功识别包含所有新行的Table1。问题是它会识别整个表格,而我只想得到单列的范围。无论我怎么做,变量table始终获取整个表格的范围。

我找到了第二种方法,如下:

Sub test()
    Dim tbl as ListObject
    Dim rng as Range
    Set tbl = ActiveSheet.ListObjects("Table1")
    Set rng = tbl.ListColumns(2).DataBodyRange
End Sub

这段代码可以工作,但只适用于表格仅有单一数据行的情况。如果我的表格仅有单一数据行,变量rng可以正确地识别表格和行。然而,该变量的值是单元格的值,例如“示例文本”,而不是单元格范围。如果我尝试添加更多行,则变量rng仍为空。

我真的很希望得到任何关于此的指导。我还应该提到,即使在使用不同的工作表时,我想获得属于该表格的列的范围,例如C3:C5。当添加更多数据以获取更新后的范围,例如C3:C80。我既不希望选择范围,也要获取该信息并将其用于其他目的。


你的第二个示例对我来说非常有效,可以捕获表格中整列的数据,但不包括标题。它适用于具有许多行的表格。如果您的表格有三列,分别命名为红色、绿色和蓝色,另一种方法也可以是 Set rng = ActiveSheet.Range("Table1[Green]") - PeterT
非常感谢您的建议。这真是太棒了。您刚刚帮助我大大简化了我的代码。祝您有美好的一天,先生! - Alexander
1个回答

8
你的代码已经返回了指定列的所有数据。你可以在Sub(在Set rng = ...后面添加)中查看输出,并在立即窗口中查看结果。
Sub test()
    Dim tbl as ListObject
    Dim rng as Range
    Set tbl = ActiveSheet.ListObjects("Table1")
    Set rng = tbl.ListColumns(2).DataBodyRange

    Debug.Print rng.Address
    Dim cl As Range
    For Each cl In rng
        Debug.Print cl.Address, cl.Value
    Next
End Sub


关于您的第二个问题,需要进行更改。
Set tbl = ActiveSheet.ListObjects("Table1")

to

Set tbl = ActiveWorkbook.Worksheets("NameOfTableSheet").ListObjects("Table1")

您可能还需要指定具体的工作簿。

Set tbl = Workbooks("NameOfWorkbook").Worksheets("NameOfTableSheet").ListObjects("Table1")

这就是我所缺少的。我不知道你可以像“rng.Address”一样获取实际范围。谢谢你的帮助! - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接