VBA, чтобы обновить Pivots - PullRequest
       9

VBA, чтобы обновить Pivots

0 голосов
/ 05 ноября 2018

Я использую код для обновления Pivots, и он работает, но я застреваю с обработчиком ошибок, он дает мне:

переменная объекта с неустановленной переменной блока

Вот код, который я использую:

Sub RefreshAllPivots()

On Error GoTo Errhandler

  Dim pivotTable As pivotTable
  For Each pivotTable In ActiveSheet.PivotTables
    pivotTable.RefreshTable
  Next

Errhandler:

     MsgBox "Error Refreshing " & pivotTable.Name

MsgBox "All Pivots Refreshed"

End Sub

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Выдается ошибка «переменная объекта с неустановленной переменной блока», поскольку pivotTable.Name не объявлено после цикла For Each pivotTable In ActiveSheet.PivotTables.

Эта переменная присваивается значению только внутри этого цикла. Exit Sub перед обработчиком ошибок является наилучшей практикой в ​​VBA:

Sub RefreshAllPivots()

    On Error GoTo Errhandler

    Dim pivotTable As pivotTable
    For Each pivotTable In ActiveSheet.PivotTables
        pivotTable.RefreshTable
        Debug.Print pivotTable.Name
    Next

    MsgBox "All Pivots Refreshed"
    Exit Sub

Errhandler:        
    MsgBox "Error Refreshing " & pivotTable.Name

End Sub
0 голосов
/ 05 ноября 2018

Вы хотите отобразить сообщение об ошибке только при наличии ошибки. Кроме того, вы можете проверить, произошла ли ошибка при назначении объекта сводной таблицы:

Sub RefreshAllPivots()
    On Error GoTo ErrHandler

    Dim pt As PivotTable
    For Each pt In ActiveSheet.PivotTables
        pt.RefreshTable
    Next pt
ErrHandler:
    If err Then
        If Not pt Is Nothing Then
            MsgBox "Error Refreshing " & pt.Name
        Else
            MsgBox "Unexpected error"
        End If
    Else
        MsgBox "All Pivots Refreshed"
    End If
End Sub

Обратите внимание, что я переименовал вашу pivotTable переменную в pt - не рекомендуется использовать зарезервированные слова в качестве имен переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...