excel vba 2147221080 - Автоматизация повторного открытия журнала Backend / Data book - PullRequest
0 голосов
/ 10 марта 2020

Я получил ошибку автоматизации и до сих пор не смог ее предотвратить. Поскольку кажется, что причина этого может сильно отличаться от случая к случаю, я постараюсь описать мой проект:

Внутри рабочей книги внешнего интерфейса есть весь код, а внутри есть внутренняя рабочая книга. это соответствующие данные. При запуске веб-интерфейс открывает бэкэнд, как этот

    Set daten_betrieb = Workbooks.Open(speicherort & "GB-Backend-" & kuerzel_betrieb & ".xlsx", _
                                UpdateLinks:=0, _
                                ReadOnly:=True, _
                                IgnoreReadOnlyRecommended:=True, _
                                Notify:=False, _
                                CorruptLoad:=xlNormalLoad)

Все работает нормально, кроме случаев, когда пользователь вручную открывает бэкэнд и закрывает его, пока веб-интерфейс все еще открыт. Я добавил следующую строку в код If daten_betrieb Is Nothing Then Call backend_betrieb backend_betrieb - это подпрограмма, которая использует метод Workbooks.Open, упомянутый ранее.

Несмотря на то, что бэкэнд открыт (снова), я все равно получаю 2147221080 - Ошибка автоматизации в этой строке:

If daten_betrieb.Sheets("Arbeitsmittel & AKZ").Cells(1, i).Value = Arbeitsmittel Then

daten_betrieb относится к недавно открытой книге, которая устанавливается на это имя .. почему это проблема? Есть идеи?

Заранее спасибо!

Редактировать: Может быть, проблема в If backend_betrieb Is Nothing Then call backend_betrieb При переходе я вижу, что Excel не прыгает в подпрограмму backend_betrieb () , Неужели Excel почему-то думает, что имя / переменная "backend_betrieb" все еще там -> не Nothing. Но Рабочая тетрадь за ней закрыта, что приводит к ошибке ?!

1 Ответ

0 голосов
/ 10 марта 2020

Я нашел способ справиться с ошибкой.

On Error Resume Next
If daten_betrieb.Sheets("Arbeitsmittel & AKZ").Cells(1, i).Value = Arbeitsmittel Then
  xxx        
End If
If Err.Number = -2147221080 Then    
  Set daten_betrieb = Nothing
  GoTo Start
End If
On Error GoTo ErrorHandler

Старт находится в начале подпрограммы, до If daten_betrieb Is Nothing call backend_betrieb

Так что в принципе кажется, что Рабочая книга была закрыта (вручную через пользователя), но объект / имя / все, что "daten_betrieb" не был ничем. Поэтому я должен был установить значение Nothing, чтобы строка If daten_betrieb Is Nothing call backend_betrieb начала действовать.

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