Страницы: 1
RSS
Алё, макрос позовите!
 
коллеги, может я чего не так делаю...  
есть код, который открывает другую книгу при открытии этой (ну надо :-) )  
в той книге, которая открывается из первой книги, живет макрос, который собирает данные с других книг. и живет он в ней в качестве модуля.  
 
в первой книге код таков:  
 
Sub Auto_Open()  
 
 
   Workbooks.Open Filename:="\\адрес_сервера\имя_папки\имя_папки\имя_файла.xls", UpdateLinks _  
       :=3  
       Call название_макроса  
End Sub  
 
 
сразу же ошибка  
 
sub or function not defined  
 
не подскажете, как мне вызвать злого духа (макрос) из той книги при открытии этой?  
делать тот макрос (из второй книги)с автозапуском я не хочу, ибо не всегда надо его запускать. а так он будет постоянно крутиться
 
Application.Run "Книга1.xls!имя_макроса"  
макрорекордер и это умеет :-)  
ай молодец!
 
угу  
 
Sub Auto_Open()  
   Workbooks.Open Filename:="C:\Temp.xls", UpdateLinks:=3  
   Application.Run "Temp.xls!Макрос1"  
End Sub
 
---  
Еще вариант: установить Reference на связанную книгу.  
 
1. Как это сделать.  
 
1.1. В связанной книге зайти в VBE, меню Tools - VBA Project Properties и на вкладке General присвоить какое-нибудь уникальное имя VBA-проекту, например: TestProject01. Сохранить связанную книгу, и можно закрыть ее, но удобнее не закрывать до выполнения следующего пункта.  
 
1.2. В основной книге зайти в VBE, из меню Tools - References - Browse - Тип файлов: MS Office Excel Files  установить ссылку на вызываемую (связанную книгу). Сохранить основную книгу.  
Если связанная книга не была закрыта, то можно  не искать ее через Browse, а сразу найти в списке References и установить флажок.  
На одну и ту же связанную книгу (кодов) могут быть установлены связи из различных основных книг (данных).  
 
Теперь при загрузке основной книги (книг) автоматически будет загружаться и связанная.    
А из основной книги можно вызывать макросы связанной, как будто они написаны в основной, например, так:    
Call МакросСвязаннойКниги()  
 
2. Что это дает.  
 
2.1. Вызов метода Run - тормознутый, при частых обращениях к нему это может сказываться на общем быстродействии кода.  
 
2.2 Есть такой полезный принцип Divide And Conquer: разделять книги с данными, и книги с кодом. Книги с данными могут быть доступны многим (операторам, менеджерам и т.п.), а связанную книгу с кодом правит кто-то один (типа, программист). Код в книгах данных минимален, обычно это просто вызовы функций или процедур связанной книги. Такой подход особенно полезен, когда одни и те же наработки в виде функций/макросов используются многократно для разных книг: достаточно исправить код в одной связанной книге, и все книги с Reference на нее автоматически получат доступ к исправленному коду.  
 
Чтобы связанная книга не была видна, ее лучше сохранить как надстройку XLA, или скрыть через меню Excel-я: Окно - Скрыть, сохранив уже из VBE (File - Save).    
 
Еще советую ставить на файл связанной книги атрибут "только для чтения" и выкладывать в общий доступ, тогда эта книга не может быть никем открыта эксклюзивно, и в любой момент программист сможет переписать ее со своего компьютера, не дожидаясь, пока все "отпустят" открытую кем-либо связанную книгу.    
 
---  
ZVI
 
вах! текст сохранил, буду осмысливать  
спасибо!
 
А казалось, что не так много нового и интересного - пока не заглянул ZVI/
 
ZVI, низкий поклон) Уйму времени мне сэкономили : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Александр, спасибо, всегда рад кому-то чего-то сэкономить :-)  
Мы тут все коллеги, поэтому «спасибо» или там «жму лапу» достаточно, а то чувствую себя неловко ;)
Страницы: 1
Читают тему
Наверх