【问题标题】:Selecting a cell within the last row of a pivot table在数据透视表的最后一行中选择一个单元格
【发布时间】:2018-03-29 19:14:15
【问题描述】:

我正在尝试编写一个宏,它为我提供数据透视表中最后一行的单元格 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

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

谢谢

G

【问题讨论】:

  • “D”列的标题是什么?您在位于“D”列的PivotTable 中设置的pivotField 的名称是什么?另外,如果这段代码放在你的Worksheet_SelectionChange事件中,你为什么要设置Set Can = Worksheets("Can")

标签: vba excel


【解决方案1】:

您可以使用可透视的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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 当数据透视表中有一个单元格中没有值时,这不起作用。就像单元格为空白时一样。我基本上想要数据透视表的“总计”部分中的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多