Подпрограммы Workbook больше нельзя вызывать напрямую по имени из VB6 - PullRequest
1 голос
/ 20 марта 2020

У меня есть программа vb6, которая вызывает макросы из файла Excel.

До недавнего времени она работала нормально (в течение многих лет), но теперь выдает ошибку.

Мы получаем runtime 438 «Объект не поддерживает это свойство или метод» ошибка.

В качестве примера вы можете использовать эту простую программу vb6:

Set App = CreateObject("Excel.Application")
Set wrkbook = App.Workbooks.Open(fileName)
App.visible = True
wrkbook.Test

Приведенный выше код не ' больше не работает. Вместо этого, если мы заменим последнюю строку следующим:

wrkbook.Application.Run "ThisWorkbook.Test"

, это сработает. Ссылка Excel, используемая для этого, была «Библиотека объектов Microsoft Excel 16.0»

enter image description here

Это было проверено в Excel 2010, 2013, Excel365 с тем же Результаты. Кроме того, все настройки безопасности отключены в Excel.

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

Также использование Application.Run также имеет некоторые недостатки Как и вызовы private & publi c sub и выданные исключения не передаются обратно в vb6.

Существуют ли другие соображения относительно использования Application.Run?

В последнее время Microsoft что-то изменила (обновление Scurity) или я что-то не так делаю?

1 Ответ

0 голосов
/ 21 апреля 2020

Я нашел проблему благодаря комментарию @UuDdLrLrS.
Проблема заключалась в использовании раннего связывания.
Все объекты Excel должны использовать позднее связывание.
Более конкретно c, рабочую книгу следует объявить как объект:

Dim wrkbook As Object 'New Excel.Workbook

В противном случае он не сможет распознать / найти ваш метод макроса.

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