Хочу узнать о нюансах запуска макросов с другой книги. В первую очередь меня интересует следующее:
Что нужно учитывать при оформлении макросов для запуска с другой книги? Будет ли макрос действовать именно на ту книгу, В КОТОРУЮ он запускается несмотря на свой код, или нужно сам макрос готовить под функционал текущей книги, для которой макрос из другой книги запускается и из которой, соответственно, идет команд Call? К примеру, как макрос ЗАПУСКАЕМЫЙ ИЗ ДРУГОЙ КНИГИ будет реагировать на ActiveSheet, Selection и т.д. - исходя из своего выделения или активного листа или того листа, откуда идет команда Call (макрос из другой книги)?
Прошу поделиться опытом, кто сталкивался с подобными операциями. Спасибо.
TheStroller написал: Что нужно учитывать при оформлении макросов для запуска с другой книги?
учитывать надо то, что указал выше.
Цитата
TheStroller написал: Будет ли макрос действовать именно на ту книгу, В КОТОРУЮ он запускается несмотря на свой код,
нет если специально не сказано, что нужно обрабатывать именно ту книгу в которой находится макрос
Цитата
TheStroller написал: или нужно сам макрос готовить под функционал текущей книги, для которой макрос из другой книги запускается и из которой, соответственно, идет команд Call
_Igor_61 написал: Начните с изучения ThisWorkbook и путей к файлам
То есть если в макросе одной книги (А), из которого вызывается макрос, находящийся в другой книги(B) использовать Application.ThisWorkbook то что будет? Будет ли Application.ThisWorkbook реагировать на какую конкретную книгу в отношении какого конкретного макроса?
Цитата
БМВ написал: это относится к приложению и одинаково обработается любым макросом, а вот
То есть вместо ActiveSheet стоит пользоваться Application.ThisWorkbook или оформлять иной путь к приложению конкретной книги в задачах которой заинтересован?
TheStroller написал: ActiveSheet стоит пользоваться Application.ThisWorkbook или оформлять иной путь к приложению конкретной книги
Похоже, для начала Вам нужно разобраться в терминах (словах) и синтаксисе VBA. Лучший путь - макрорекордер и что непонятно - в поисковике. У книги нет приложений. Excel - приложение. Возможно, Вы что-то другое подразумеваете под этим словом.
_Igor_61 написал: У книги нет приложений. Excel - приложение
Ну да, и в контексте вопроса о запуске в одном Excel файле макроса, находящегося в другом Excel файле ваш комментарий крайне полезен.
Цитата
RAN написал: A для переноски бревен вместо слона мартышку использовать можно?
Вам вероятно можно, смотрите сами по своей ситуации, а мне все зависит от контекста заданного мною вопроса и иных под-вопросов исходя из полученных и понятых мною ответов.
ActiveSheet - переводится на русский язык "Активный лист" Application.ThisWorkbook - переводится на русский язык - Приложение.ЭтаКнига (ЭтаКнига - рабочая книга с запущенным в данный момент макросом) Лист - это одно, книга - это другое
Понятие "приложение" я истолковал именно как Application.ThisWorkBook, вам как знатоку английского языка должно быть ясно возможно, что Application переводится на русский язык как "приложение".
Я задаю вопрос.И получаю один из ответов
Цитата
БМВ написал: как макрос ЗАПУСКАЕМЫЙ ИЗ ДРУГОЙ КНИГИ будет реагировать на ActiveSheet, Selection это относится к приложению и одинаково обработается любым макросом, а вот...
Моим встречным вопросом была попытка уточнить (так как понятие "приложение" я истолковал именно как Application.ThisWorkBook).
Вместо дискуссионого клуба и разбора терминов можно было давно ответить и привести пример, тем более что изначальный вопрос подразумевал, чтобы кто-то именно опытом поделился[QUOTE]
Подобные вопросы лучше разбирать в следующем порядке. Задающий вопрос изучает литературу (Главное правило форума) и дальше спрашивает, что не понятно. По данной теме разъяснений очень много, например здесь.
sokol92 написал: Подобные вопросы лучше разбирать в следующем порядке.
Хорошо, спасибо, согласен.
А если сменить окно (с одного эксель файла на другой) поменяется ли ActiveWorkBook? По каким вообще критериям программа понимает, что у нее активно или открыто? И одно ли это и тоже "открыто" и "активно" и в чем разница? Update: Можно выяснить через
Цитата
Sub Show_ActiveWorkbook_Add() Workbooks.Add MsgBox ActiveWorkbook.Name End Sub
Далее, конкретный пример, запуск макроса с одной книги для другой
Код
Application.Run "file2.xlsm!macros1"
Допустим, что в файле file1.xlsm запускается macros1" из file2.xlsm Что нужно сделать чтобы макрос проигрывался именно для/в рамках/на протяжении file1.xlsm?
Upgrade: Workbooks("wbname").Activate, возможно, по такому видимо принципу, если с другого файла запускать.
sokol92 написал: В примере из #12 ищется открытая книга (file2.xls), далее в ней ищется макрос KakajatoFunktsija.
Спасибо, я переформулировал вопрос в #12. А если речь идет о неактивной книге? Допустим, у меня открыто 2 Excel файла, один активный (открытое или развернутое окно Excel файла), но макросы запускаются с другого, окно которого не открыто?
Я дал точный ответ в #13. Там не говорится о том, активна или не активна книга file2.xlsm. Макросы из разных книг могут вызывать друг друга только через Application.Run. Если есть вероятность, что в течение работы макроса ActiveWorkbook (или ActiveSheet) может измениться, то в начале макроса этот объект нужно запомнить в переменной и далее к нему не обращаться.
sokol92 написал: Макросы из разных книг могут вызывать друг друга только через Application.Run.Если есть вероятность, что в течение работы макроса ActiveWorkbook (или ActiveSheet) может измениться, то в начале макроса этот объект нужно запомнить в переменной и далее к нему не обращаться.
Спасибо, буду иметь в виду. Хоть один ответ без водолейства. Я спрашиваю, чтобы в последствии испробовать теорию по снижении нагрузки на файл (в виде размера файла, как минимум), если много макросов понадобятся в будущем. Установить переменную на книгу - это Dim ThisWorkSheet("Name") As Object ?
TheStroller написал: Понятие "приложение" я истолковал именно как Application.ThisWorkBook
Эта строка не называет книгу приложением. Она говорит, что идет обращение к книге приложения (в данном случае - к книге, в которой находится исполняемый код). Application (приложение) - сам Excel Excel.Книга - у объекта Книга родитель - приложение Excel
TheStroller, не нужно на форуме искать ответы на вопросы ПО ОСНОВАМ языка. Хотите освоить - для начала углубитесь в литературу, в простые примеры. F1 - справка в VBA. Вы как бы приняли рекомендацию (Хорошо, спасибо, согласен), но продолжаете все в том же духе... Знания намного быстрее и прочнее можно получить, набивая по пути познания здоровенные шишки и болючие синячищи )
Ознакомьтесь с правилами форума. Один из пунктов гласит: один вопрос - одна тема. Но, сразу же предостережение: форум - не справка. Не нужно по каждому чиху создавать темы по вопросам, ответы на которые можно самостоятельно получить, малость изучив объектную модель, понять, какие переменные бывают, как объявляются, как обращаться к книгам, листам, диапазонам.