选择数据透视表的最后一行中的单元格

时间:2018-03-29 19:14:15

标签: excel vba excel-vba

我正在尝试编写一个宏,它给出了数据透视表中最后一行的单元格D的值。这是我到目前为止的代码。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim PT As PivotTable
Dim Can As Worksheet
Dim LastRow As Range

Set Can = Worksheets("Can")
Set PT = Can.PivotTables("Can Table")

Set Flight1 = Can.Range(("D14"), ("D" & Rows.Count)).End(xlDown)

Can.Range("AC15") = Application.WorksheetFunction.Sum(Flight1)

End Sub

这个宏工作正常,直到我开始使用数据透视表。由于数据透视表中有一些单元格没有值,因此我现在拥有的代码将识别最后一行直到无值单元格。我想要的是数据透视表的最后一行(又名" Grand Total")。如何选择数据透视表的最后一行来忽略数据透视表中可能没有值的任何单元格?

由于

2 个答案:

答案 0 :(得分:0)

使用End(xlDown)查找最后一行非常不稳定 尝试

("D" & Rows.Count).End(xlUp)

如果您的数据透视表下面有数据,我可以看到唯一的问题

答案 1 :(得分:0)

您可以使用pivottable TableRange1属性

根据需要调整以下内容

Option Explicit

Sub test()

    Dim PT As PivotTable
    Dim Can As Worksheet
    Dim Flight1 As Range
    Dim lastRow As Long

    Set Can = ThisWorkbook.Worksheets("Can")

    With Can

        Set PT = .PivotTables("Can Table")    'change as appropriate

        lastRow = .Range(Split(PT.TableRange1.Address(0, 0), ":")(1)).Row

        If lastRow >= 14 Then
            Set Flight1 = Can.Range("D14:D" & lastRow)
        Else
            Debug.Print "Last row is before start row of 14"
        End If

    End With

    If Not Flight1 Is Nothing Then Debug.Print Flight1.Address

End Sub