Страницы: 1
RSS
К вопросу о запуске макросов с другой книги
 
Добрый день,

Хочу узнать о нюансах запуска макросов с другой книги. В первую очередь меня интересует следующее:

Что нужно учитывать при оформлении макросов для запуска с другой книги? Будет ли макрос действовать именно на ту книгу, В КОТОРУЮ он запускается несмотря на свой код, или нужно сам макрос готовить под функционал текущей книги, для которой макрос из другой книги запускается и из которой, соответственно, идет команд Call? К примеру, как макрос ЗАПУСКАЕМЫЙ ИЗ ДРУГОЙ КНИГИ будет реагировать на ActiveSheet, Selection и т.д. - исходя из своего выделения или активного листа или того листа, откуда идет команда Call (макрос из другой книги)?

Прошу поделиться опытом, кто сталкивался с подобными операциями. Спасибо.
Изменено: TheStroller - 04.11.2021 14:48:45
 
Цитата
TheStroller написал:
как макрос ЗАПУСКАЕМЫЙ ИЗ ДРУГОЙ КНИГИ будет реагировать на ActiveSheet, Selection
это относится к приложению и одинаково обработается любым макросом, а вот
Цитата
TheStroller написал:
и т.д.
зависит что за и т.д.

Цитата
TheStroller написал:
Что нужно учитывать при оформлении макросов для запуска с другой книги?
учитывать надо то, что указал выше.
Цитата
TheStroller написал:
Будет ли макрос действовать именно на ту книгу, В КОТОРУЮ он запускается несмотря на свой код,
нет если специально не сказано, что нужно обрабатывать именно ту книгу в которой находится макрос
Цитата
TheStroller написал:
или нужно сам макрос готовить под функционал текущей книги, для которой макрос из другой книги запускается и из которой, соответственно, идет команд Call
все зависит от задачи.
По вопросам из тем форума, личку не читаю.
 
Цитата
TheStroller написал:
откуда идет команда Call
Этим Вы сами ответили на свой вопрос. Начните с изучения ThisWorkbook и путей к файлам
 
Цитата
_Igor_61 написал: Начните с изучения ThisWorkbook и путей к файлам
То есть если в макросе одной книги (А), из которого вызывается макрос, находящийся в другой книги (B) использовать Application.ThisWorkbook то что будет? Будет ли Application.ThisWorkbook реагировать на какую конкретную книгу в отношении какого конкретного макроса?
Цитата
БМВ написал: это относится к приложению и одинаково обработается любым макросом, а вот
То есть вместо ActiveSheet стоит пользоваться Application.ThisWorkbook или оформлять иной путь к приложению конкретной книги в задачах которой заинтересован?
 
Цитата
TheStroller написал:
ActiveSheet стоит пользоваться Application.ThisWorkbook или оформлять иной путь к приложению конкретной книги
Похоже, для начала Вам нужно разобраться в терминах (словах) и синтаксисе VBA. Лучший путь - макрорекордер и что непонятно - в поисковике. У книги нет приложений. Excel - приложение. Возможно, Вы что-то другое подразумеваете под этим словом.  
Цитата
TheStroller написал:
или оформлять иной путь
без проблем, если он Вам известен :)
 
Цитата
TheStroller написал:
То есть вместо ActiveSheet стоит пользоваться Application.ThisWorkbook
A для переноски бревен вместо слона мартышку использовать можно?
 
Цитата
_Igor_61 написал: У книги нет приложений. Excel - приложение
Ну да, и в контексте вопроса о запуске в одном Excel файле макроса, находящегося в другом Excel файле ваш комментарий крайне полезен.

Цитата
RAN написал: A для переноски бревен вместо слона мартышку использовать можно?
Вам вероятно можно, смотрите сами по своей ситуации, а мне все зависит от контекста заданного мною вопроса и иных под-вопросов исходя из полученных и понятых мною ответов.
 
ActiveSheet - переводится на русский язык "Активный лист"
Application.ThisWorkbook - переводится на русский язык - Приложение.ЭтаКнига (ЭтаКнига - рабочая книга с запущенным в данный момент макросом)
Лист - это одно, книга - это другое
Изменено: New - 04.11.2021 18:27:17
 
Понятие "приложение" я истолковал именно как  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, возможно, по такому видимо принципу, если с другого файла запускать.
 
Объект ActiveWorkbook представляет собой книгу, соответствующую активному (текущему) окну. За окна отвечает операционная система (Windows).

В примере из #12 ищется открытая книга (file2.xlsm),  далее в ней ищется макрос macros1.

P.S. Если уже задали вопрос, то не меняйте его условий, иначе отвечающий должен модифицировать свой ответ.
Изменено: sokol92 - 04.11.2021 19:16:09
Владимир
 
Цитата
sokol92 написал:
В примере из #12 ищется открытая книга (file2.xls),  далее в ней ищется макрос KakajatoFunktsija.
Спасибо, я переформулировал вопрос в #12. А если речь идет о неактивной книге? Допустим, у меня открыто 2 Excel файла, один активный (открытое или развернутое окно Excel файла), но макросы запускаются с другого, окно которого не открыто?
Изменено: TheStroller - 04.11.2021 19:17:33
 
Я дал точный ответ в #13. Там не говорится о том, активна или не активна книга file2.xlsm.
Макросы из разных книг могут вызывать друг друга только через Application.Run.
Если есть вероятность, что в течение работы макроса ActiveWorkbook (или ActiveSheet) может измениться, то в начале макроса этот объект нужно запомнить в переменной и далее к нему не обращаться.
Изменено: sokol92 - 04.11.2021 19:34:30
Владимир
 
Цитата
sokol92 написал:
Макросы из разных книг могут вызывать друг друга только через Application.Run.Если есть вероятность, что в течение работы макроса ActiveWorkbook (или ActiveSheet) может измениться, то в начале макроса этот объект нужно запомнить в переменной и далее к нему не обращаться.

Спасибо, буду иметь в виду. Хоть один ответ без водолейства. Я спрашиваю, чтобы в последствии испробовать теорию по снижении нагрузки на файл (в виде размера файла, как минимум), если много макросов понадобятся в будущем.
Установить переменную на книгу - это Dim ThisWorkSheet("Name") As Object ?
Изменено: TheStroller - 04.11.2021 19:52:56
 
Объявление переменных. На форуме одна тема - один вопрос.
Владимир
 
Цитата
TheStroller написал: Понятие "приложение" я истолковал именно как  Application.ThisWorkBook
Эта строка не называет книгу приложением. Она говорит, что идет обращение к книге приложения (в данном случае - к книге, в которой находится исполняемый код). Application (приложение) - сам Excel
Excel.Книга - у объекта Книга родитель - приложение Excel

TheStroller, не нужно на форуме искать ответы на  вопросы ПО ОСНОВАМ языка. Хотите освоить - для начала углубитесь в литературу, в простые примеры. F1 - справка в VBA. Вы как бы приняли рекомендацию (Хорошо, спасибо, согласен), но продолжаете все в том же духе...
Знания намного быстрее и прочнее можно получить, набивая по пути познания здоровенные шишки и болючие синячищи )

Ознакомьтесь с правилами форума. Один из пунктов гласит: один вопрос - одна тема. Но, сразу же предостережение: форум - не справка. Не нужно по каждому чиху создавать темы по вопросам, ответы на которые можно самостоятельно получить, малость изучив объектную модель, понять, какие переменные бывают, как объявляются, как обращаться к книгам, листам, диапазонам.
Страницы: 1
Наверх