Добрый день! 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.
Не знаю, сделайте на работе так же два файла и смотрите, будет работать или нет.
Если будет, а у ваш код не работает, значит в вашем коде есть какая-то неявная ошибка.
В общем проблемы была в том, что вызываемая функция находилась не в модуле, а в листе. Если в листе, то результат не возвращается.