Ошибка времени выполнения '424' объект требуется при вызове функции VBA - PullRequest
0 голосов
/ 06 февраля 2019

Я использую этот код для обновления источника всех моих сводных таблиц, но я всегда получаю

«Требуется объект времени выполнения« 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

1 Ответ

0 голосов
/ 06 февраля 2019

Замените сабвуфер на этот:

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 следует использовать с осторожностью, только если известно, что происходит.Например, объекты передаются по ссылке (ByRef), а сила скобок ByVal передает.

Чтобы избежать необъявленных переменных в будущем, используйте Option Explicit в верхней части вашего модуля - Чтоdo Option Strict и Option Explicit do?

...