[英]How to get the range of "Total Sum" column in a pivot table? 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.