Application.Run не возвращает результат функции

Автор Посетитель, 28 июля 2022, 18:49

Посетитель

Добрый день! Application.Run не возвращает результат функции из другой книги, хотя код вызывается и выполняется без ошибок. В чем может быть проблема? В интернете пишут, что такие конструкции работают.
Excel 2016

Пример:

Книга1
x = Application.Run ("GetSome")

Книга2
public function GetSome()
GetSome = 1
end function

Администратор

Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

По идее ваш код не должен работать.
При запуске макроса, который находится в другой книге, нужно указать имя книги, имя модуля и имя процедуры.
Почему у вас не происходит ошибки во время запуска вашего кода - я не знаю. В режиме F8 запустите и посмотрите, куда движется жёлтая строка.

Правильно так, это при условии, что вторая книга открыта. Если книга закрыта, то нужно указать путь, по которой находится книга.

Sub Макрос()

    Dim x
   
    x = Application.Run("'Книга2.xlsb'!Module1.GetSome")

End Sub

Посетитель

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

Администратор

Покажите код, какой он у вас в оригинале.
И в режиме F8 вы запускали код? Жёлтая строка заходит в функцию "GetSome"?

Администратор

Вот я сделал два файла для теста. Как тестировать. Откройте обе книги. Запускайте макрос из книги 1.
У меня эта ситуация работает.

Посетитель

Да, ситуация из примера работает, правда сейчас я с домашнего компа, а тестировал на рабочем. Код из другой книги там точно выполнялся, в режиме отладки (F8) перепрыгивал в другую книгу. Есть ли вероятность, что не возвращается значение из-за каких-либо политик безопасности windows? Из отличий только формат книги, тестировал на xlsm.

Администратор

Не знаю, сделайте на работе так же два файла и смотрите, будет работать или нет.
Если будет, а у ваш код не работает, значит в вашем коде есть какая-то неявная ошибка.

Посетитель

В общем проблемы была в том, что вызываемая функция находилась не в модуле, а в листе. Если в листе, то результат не возвращается.