У меня есть макрос, который я написал, который я использую для обновления некоторых сводных таблиц. В случае, если рабочая таблица или сводная таблица не существует, я проверяю значение Err.Number на ненулевое, но оно всегда возвращается как 40040, но в любом случае успешно выполняется без каких-либо предупреждений (кроме моего собственного). Я обхожу его, просто проверяя, что Err.Number не равен 0 или 40040, но я хотел бы знать, почему он возвращает 40040, когда не происходит ошибок и все работает. Когда я записываю Excel и вставляю строку после обновления, указывающую номер ошибки, он показывает то же самое.
Мне также пришлось сбросить номер ошибки после первого обновления, иначе я иногда получал бы ошибку 1004, даже если она также успешно работает.
On Error Resume Next
Worksheets("Pivots 1o").PivotTables("Pivot1").PivotCache.Refresh
If Err.Number <> 0 And Err.Number <> 40040 Then Call MsgBox("Warning: couldn't refresh pivots on 'Pivots 1o' worksheet", vbCritical, "handlePivot()")
Err.Number = 0 ' During testing I forced the above error warning and it gave me the below error warning too (error 1004). Setting to 0 here seems to avoid this for some reason.
Worksheets("Pivots 2o").PivotTables("Pivot2").PivotCache.Refresh
If Err.Number <> 0 And Err.Number <> 40040 Then Call MsgBox("Warning: couldn't refresh pivots on 'Pivots 2o' worksheet", vbCritical, "handlePivot()")
On Error GoTo 0
Кто-нибудь знает, почему происходят эти ошибки, которые обнаруживаются только при явном тестировании на них?