簡體   English   中英

獲取表格列 Excel VBA 的范圍(或值)

[英]Get the range (or values) of a table column Excel VBA

我正在嘗試使用 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 我也不想選擇范圍,只是獲取該信息並將其用於其他目的。

您的代碼已返回指定列的所有數據。 您可以通過添加到您的 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")

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

您可能還想指定特定的工作簿。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM