运行时错误调用函数VBA时,需要“424”对象

问题描述 投票:1回答:1

我使用这个代码来更新我的所有数据透视表的来源,但我总是得到

“运行时间错误要求‘424’对象”。

怪异的是,配股代码的功能循环内的实际工作没有这个错误,所以我不认为这是函数的代码,但我打电话的方式。我想知道为什么它不工作。

Private Sub Workbook_Open()
    For Each st In ActiveWorkbook.Worksheets
        For Each pt In st.PivotTables
            UpdatePivotSource (pt)
        Next
    Next
End Sub

Sub UpdatePivotSource(pt As PivotTable)
    Dim StartPoint As Range
    Dim NewRange As String
    Dim LastCol As Long
    Dim lastRow As Long
    Dim Data_Sheet As Worksheet
    Dim DataRange As Range

    Set Data_Sheet = ThisWorkbook.Worksheets(Split(pt.PivotCache.SourceData, "!")(0))
    Set StartPoint = Data_Sheet.Range("A1")
    LastCol = StartPoint.End(xlToRight).Column
    lastRow = StartPoint.End(xlDown).Row

    Set DataRange = Data_Sheet.Range(StartPoint, Data_Sheet.Cells(lastRow, LastCol))
    NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)

    pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
End Sub
excel vba pivot-table
1个回答
1
投票

更改子这一个:

Private Sub Workbook_Open()
    Dim pt As Object 'or Dim pt As PivotTable
    For Each st In ActiveWorkbook.Worksheets
        For Each pt In st.PivotTables
            UpdatePivotSource pt
        Next
    Next
End Sub

不同的是,pt被声明为对象而pt不是括号内。在VBA参数括号应谨慎使用,只有当一个人知道什么是happenning。例如,对象是通过引用(ByRef)和括号力ByVal传递通过。

为了避免非声明的变量在未来使用期权上的模块的顶部明确 - What do Option Strict and Option Explicit do?

© www.soinside.com 2019 - 2024. All rights reserved.