【问题标题】:Referencing a range of columns from a pivot table引用数据透视表中的一系列列
【发布时间】:2021-09-06 03:44:37
【问题描述】:

我知道我可以使用来自https://peltiertech.com/referencing-pivot-table-ranges-in-vba/ 的优秀教程中的 pt.DataBodyRange.select 引用数据透视表中的所有列,包括总计。但是我想引用除前 3 列之外的所有列。这似乎没有出现在教程中。

到目前为止我所拥有的:我分别引用每一列,然后使用联合函数将它们组合起来,请参见下面的代码,其中 EmployeeID、StartDate、EndDate 是数据透视表中的列标题,Total 是总计列。 这似乎工作正常,但是我想知道它是否可以在一行中完成,而不必单独引用每一列,然后进行范围的联合

Dim EmployeeID As Range
    Dim StartDate As Range
    Dim EndDate As Range
    Dim Total As Range
    Dim Rg As Range
    Dim pt As PivotTable
    Dim TimeSheets() As Variant
    
    Set pt = shPivotTable.PivotTables("ptTimeSheets")
            
    With pt
        
        Set EmployeeID = .PivotFields("EmployeeID").DataRange
        Set StartDate = .PivotFields("StartDate").DataRange
        Set EndDate = .PivotFields("EndDate").DataRange
        Set Total = pt.RowRange.Offset(1, 6).Resize(pt.RowRange.Rows.count - 1)
        Debug.Print Total.Address
    End With
    Set Rg = Union(EmployeeID, StartDate, EndDate, Total)
    Debug.Print Rg.Address

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    您可以调整 DataBodyRange 的大小以删除前 3 列:

    pv.DataBodyRange.Offset(0, 3).Resize(, pv.DataBodyRange.Columns.Count - 3)
    

    您还可以使用开始和结束范围来创建范围:

    Set rg = shPivotTable.Range(startRange,endRange)
    

    【讨论】:

    • 您的第一个建议回答了直接的问题,但是如果列数不同,那将不起作用,我喜欢您的第二个建议,请您举例说明
    • 我似乎无法让 Set rg = shPivotTable.Range(startRange,endRange) 工作
    • 无法正常工作是什么意思?
    猜你喜欢
    • 2020-05-05
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    相关资源
    最近更新 更多