Excel VBA中对特定行和列范围的结构化引用
我试图遍历一个Excel VBA中对特定行和列范围的结构化引用,excel,vba,Excel,Vba,我试图遍历一个ListObject,并根据某行是否可见,选择该行的某些列以复制并粘贴到另一个工作表中。我目前拥有以下代码: Set tbl = ActiveSheet.ListObjects("MasterBudget") For r = 1 To tbl.ListRows.Count If tbl.ListRows(r).Range.RowHeight <> 0 Then 'not hidden/filtered tbl.ListColumns("Item
ListObject
,并根据某行是否可见,选择该行的某些列以复制并粘贴到另一个工作表中。我目前拥有以下代码:
Set tbl = ActiveSheet.ListObjects("MasterBudget")
For r = 1 To tbl.ListRows.Count
If tbl.ListRows(r).Range.RowHeight <> 0 Then 'not hidden/filtered
tbl.ListColumns("Item description").DataBodyRange(r).Select
Range("[@[Item description]:[Unit 3]]").Select '<-- problem line
End If
Next r
Set tbl=ActiveSheet.ListObjects(“主预算”)
对于r=1到tbl.ListRows.Count
如果tbl.ListRows(r).Range.RowHeight为0,则“未隐藏/筛选”
tbl.ListColumns(“项目描述”).DataBodyRange(r)。选择
范围(“[@[Item description]:[Unit 3]]”。选择“这可能不是最优雅的,但处理结构化ListObject表引用很少
Dim tbl As Object, r As Long
Set tbl = ActiveSheet.ListObjects("MasterBudget")
For r = 1 To tbl.ListRows.Count
If tbl.ListRows(r).Range.RowHeight <> 0 Then 'not hidden/filtered
tbl.ListColumns("Item description").DataBodyRange(r).Select
ActiveSheet.Range(tbl.ListColumns("Item description").DataBodyRange(r), _
tbl.ListColumns("Unit 3").DataBodyRange(r)).Select
End If
Next r
Dim tbl作为对象,r作为长
Set tbl=ActiveSheet.ListObjects(“主预算”)
对于r=1到tbl.ListRows.Count
如果tbl.ListRows(r).Range.RowHeight为0,则“未隐藏/筛选”
tbl.ListColumns(“项目描述”).DataBodyRange(r)。选择
ActiveSheet.Range(tbl.ListColumns(“项目描述”).DataCodeRange(r)_
tbl.ListColumns(“第3单元”)。数据源范围(r))。选择
如果结束
下一个r
您也可以使用tbl.parent
来代替ActiveSheet
@
符号,仅当输入到相关列表对象
中的单元格中时才有意义
从代码中,您已经有了所需的行和列,因此所需的单元格是这两个单元格的交点:
Dim tbl As ListObject
Dim ColumnsOfInterest As Range
Dim r As Long
Set tbl = ActiveSheet.ListObjects("MasterBudget")
Set ColumnsOfInterest = tbl.DataBodyRange.Worksheet.Range(tbl.ListColumns("Item description").Range, tbl.ListColumns("Unit 3").Range)
For r = 1 To tbl.ListRows.Count
If tbl.ListRows(r).Range.RowHeight <> 0 Then 'not hidden/filtered
Dim RangeToCopy As Range
Set RangeToCopy = Application.Intersect(tbl.ListRows(r).Range, ColumnsOfInterest)
RangeToCopy.Copy ...
End If
Next r
Dim tbl作为ListObject
暗淡的柱状物范围
变暗,变长
Set tbl=ActiveSheet.ListObjects(“主预算”)
Set ColumnsOfInterest=tbl.DataBodyRange.sheet.Range(tbl.ListColumns(“项目描述”).Range,tbl.ListColumns(“第3单元”).Range)
对于r=1到tbl.ListRows.Count
如果tbl.ListRows(r).Range.RowHeight为0,则“未隐藏/筛选”
变暗范围复制为范围
设置RangeTopy=Application.Intersect(tbl.ListRows(r.Range,ColumnsOfInterest)
范围复制。复制。。。
如果结束
下一个r
请注意。这两个回答都解决了这个问题,但这一个更容易阅读。GSerg意识到我的范围对于感兴趣的列是不连续的(跳过第二列)-关于如何在该变量中组合第一列和第3-10列,有什么建议吗?太好了!我之所以使用这种方法,是因为方法3:Set ColumnsOfInterest=Application.Union(tbl.ListColumns(“项目描述”).Range,tbl.dataodyrange.Worksheet.Range(tbl.ListColumns(“单位成本(VND)”).Range,tbl.ListColumns(“单位3”).Range))