Обновление Office 365 до версии 1908 - Ссылки VBA / Библиотека объектов - PullRequest
0 голосов
/ 05 февраля 2020

Проблема

Наш офис P C работает под управлением Office 365 ProPlus и постепенно обновляется до версии 1908 (сборка 11929.20562). По мере обновления P C многие наши макросы VBA не работают с различными объектными ошибками. Пока мы получаем ошибки в двух продуктах, Outlook и WRQ Reflections (эмулятор терминала).

Примеры

Sub master_dailyWhispirSMS_P2(myExcel As Excel.Application, myWorkbook As Excel.Workbook, worksheetName As String, testingMode As Boolean)

While Trim(myWorkbook.Worksheets(worksheetName).Cells(rowNum, 1).Value) <> ""

Приведенный выше код привел к выполнению ошибка времени '91' Переменная объекта или С переменной блока не установлено

Dim myExcel As Excel.Application    
Dim myWorkbook As Excel.Workbook
Set myExcel = GetObject(, "Excel.Application")
myExcel.Workbooks.Open (folderPath & "\" & fileName)
Set myWorkbook = myExcel.Workbooks(fileName)
myWorkbook.Activate

Приведенный выше код привел к ошибке Ошибка компиляции: метод или элемент данных не найден. Ошибка компиляции была на MyWorkbook.Activate .

Находки

На данный момент общая тема заключается в том, что мы используем раннее связывание и используем объекты из библиотека объектов Microsoft Excel.

Я пытался перейти на использование позднего связывания, и это помогло мне справиться с одной проблемой, но существует слишком много подпрограмм, которые могут нуждаться в обновлении.

Изнутри редактора VBA в меню «Сервис» в разделе «Ссылки» библиотека объектов Microsoft Excel 16.0 отображается как выбранная. Я попытался удалить ссылку, а затем снова добавить ее, и это, похоже, решило проблемы. Это сработало и для моих коллег P C.

Идеи / решения

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

Обратите внимание, я все еще очень "зеленый" с моим пониманием раннего и позднего связывания, но я думаю, что каким-то образом ссылки на библиотеки объектов либо повреждены, либо просто не указывают на правильный файл DLL после обновления. Это объясняет, почему различные методы не работают.

1 Ответ

0 голосов
/ 10 февраля 2020

Хотя я не смог выяснить, что вызвало проблему, я смог решить проблему, удалив каждую ссылку, а затем снова добавив ее. К счастью, я узнал, что смог изменить мастер-файл и попросил наших ИТ-специалистов передать его всем сотрудникам, поскольку мне не удалось заставить VBA удалить и добавить ссылки в нужный проект.

Я смог запустить макрос в каждом проекте по отдельности и сравнил Reference.Name, Reference.Description, Reference.fullpath и Reference.GUID. Все свойства были одинаковыми, поэтому не знаю, почему ссылки «сломались».

В любом случае, отправка этого ответа просто для подтверждения того, что удаление и добавление ссылок решило проблему для меня.

Это был код, который я использовал для сравнения ссылок между проектами (до и после добавления / удаления ссылок).

Sub checkLibraryReference()

Dim vbProj As Object
Dim refChk As Object
Set vbProj = Session.VBProject
Set refChk = vbProj.References
Dim printLine As String

For Each refCheck In vbProj.References
printLine = refCheck.Name & "," & _
     refCheck.Description & "," & _
     refCheck.major & "," & _
     refCheck.minor & "," & _
     refCheck.fullpath & "," & _
     refCheck.GUID & Chr(13)
Debug.Print printLine

Next refCheck

End Sub

Я взял вывод из окна Immediate, вставил в Excel и использовал Text-to-Columns , Затем я просто сделал простое сравнение.

Я изо всех сил пытался найти документацию по объекту References, но в конце концов нашел ее в справочнике Access VBA здесь:

Справочная библиотека Access VBA

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