Ошибка времени выполнения VBA -2147319767 (80028029) - PullRequest
1 голос
/ 11 апреля 2019

У меня проблемы с моими Excel-файлами / VBA-кодом.Я обновляю много файлов Excel (копирую / вставляю в таблицы) и обновляю сводные таблицы в этих файлах.Я использую этот код / ​​метод в течение многих лет, и он работает просто отлично.

Но недавно мои файлы работали странно после запуска VBA.При обновлении 35 файлов Excel около 15 из них «повреждены» после обновления.Я могу открыть их, но я не могу хранить.Затем файлы просто закрылись.

Поэтому я изменил свою строку «Application.DisplayAlerts = False» на «True» и снова запустился.И на этот раз VBA перестает отображать: Ошибка во время выполнения '-2147319767 (80028029): Ошибка автоматизации.И это указывает на эту строку:

For Each pt In sh_ske_beløp.PivotTables

Это только один из 12 листов, которые я обновляю точно так же (весь код такой):

For Each pt In sh_ske_beløp.PivotTables
pt.RefreshTable
Next pt

IЯ полностью потерян!Этот бит кода должен быть легким делом!И я просто не могу понять, что не так.Я делаю "Option Explicit" -бит вверху, без каких-либо ошибок.Я ничего не делаю Advanced, просто открываю файлы и копирую / вставляю данные между рабочими книгами / листами и обновляю сводные таблицы.Здесь нет никакой пользовательской формы.Ничто не «отсутствует» в меню «Инструменты / Ссылки».Код выполняется в 64-разрядной версии Windows 10 с использованием 64-разрядной версии Excel 365.Все доступные обновления были установлены.

1 Ответ

2 голосов
/ 11 апреля 2019

ThisWorkbook.Worksheets ( "sh_ske_beløp"). PivotTables

попробуйте запустить этот код

Sub test()
Dim sht As Worksheet
Dim wb As Workbook
Dim shtName As String
Dim pt As PivotTable
Set wb = ThisWorkbook
shtName = "sh_ske_beløp"
For Each sht In wb.Worksheets
    If sht.Name = shtName Then
        For Each pt In sht.PivotTables
            pt.RefreshTable
        Next pt
    End If
Next sht
If Not wsExists(shtName, wb) Then MsgBox shtName & " NotExist!!!"
End Sub

Function wsExists(wsName As String, wb As Workbook) As Boolean
Dim ws
    For Each ws In wb.Sheets
        wsExists = (wsName = ws.Name): If wsExists Then Exit Function
    Next ws
End Function

Переменные VBA

Переменные - это конкретные значения, которые хранятся в памяти компьютера или в системе хранения. Позже вы можете использовать это значение в коде и выполнить. Компьютер извлечет это значение из системы и покажет в выходных данных. Каждой переменной должно быть присвоено имя.

Чтобы назвать переменную в VBA, вам нужно следовать следующим правилам.

  • Должно быть не более 255 символов
  • Интервалы не разрешены
  • Не должно начинаться с цифры
  • Период не допускается
  • DOT не допускается
  • НЕТ Unicode разрешен
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...