Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA中对特定行和列范围的结构化引用_Excel_Vba - Fatal编程技术网

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))