Страницы: 1
RSS
Как правильно закрыть файл, из которого вызывается макрос?
 
Итак я наконец осилила свой первый макрос!    
Три дня проведенные за компом в воскуривании FAQ, плюс пройденные когда-то два семестра паскаля не прошли даром, продукт почти готов. Отдельное спасибо Dophin за помощь!  
 
Работает просто - есть исходный файл xxxx.mml, из него некоторые данные экспортируются в удобную пользователям табличку, с помощью файла export.xls и чудо-кнопки в нем.  
 
Мне хочется, чтобы макрос после выполнения сам закрывал рабочий файл export.xls и оставлял пользователя в конечном файле с экспортированными данными.  
 
Сейчас у меня для этой цели служит строчка    
 
' Закрываем файл  
ThisWorkbook.Close False  
 
End Sub  
 
Но я так понимаю что при таком раскладе  макрос завершает свою работу не по End Sub, а при закрытии самого файла строчкой ThisWorkbook.Close, что не есть правильно.  Может я ошибаюсь? Макрос лежит в Module1 этого самого файла.  
 
Как сделать чтобы было кошерно? Предполагается что этой бирюлькой будут пользоваться и другие люди, так что в личную книгу макросов его не загонишь.  
 
А если кто найдет еще какие ошибки, ткните меня пожалуйста носом в них.
 
{quote}{login=JessieFly}{date=31.01.2010 06:25}{thema=Как правильно закрыть файл, из которого вызывается макрос?}{post}Но я так понимаю что при таком раскладе  макрос завершает свою работу не по End Sub, а при закрытии самого файла строчкой ThisWorkbook.Close{/post}{/quote}  
Неверно. Сначала закроется Книга, и только после этого макрос завершит свою работу.
 
Тут нужно уточнение - КАКАЯ Книга закрывается. Скорее всего разговор о той, которая открывалась для импорта данных.
 
{quote}{login=Юрий М}{date=31.01.2010 06:35}{thema=}{post}Тут нужно уточнение - КАКАЯ Книга закрывается. Скорее всего разговор о той, которая открывалась для импорта данных.{/post}{/quote}  
 
Нет, разговор о той, в которой живет макрос. Та, оторая открывалась для импорта данных, закрыта в макросе раньше. Пример же есть.
 
Извините, предыдущий пост мой, не подписалась случайно.
 
в примере книга с макросом закрывается - не закрывается книга с импортом данных, чтобы закрыть и ее добавьте в код Workbooks(DestFileName).Close False  
 
Добавьте в начало макроса Application.ScreenUpdating = False  
 
Добавьте обработчик ошибки когда пользователь отказывается от перезаписи файла.
 
{quote}{login=Dophin}{date=31.01.2010 08:15}{thema=}{post}в примере книга с макросом закрывается - не закрывается книга с импортом данных, чтобы закрыть и ее добавьте в код Workbooks(DestFileName).Close False  
 
Добавьте в начало макроса Application.ScreenUpdating = False  
 
Добавьте обработчик ошибки когда пользователь отказывается от перезаписи файла.{/post}{/quote}  
 
Книга с импортом пусть остается, так и задумано. С итоговым файлом пользователь может делать что хочет.  
 
Я просто не могу понять логику работы программы - я закрываю внутри макроса книгу, частью которой является макрос, и маркос при этом продолжает выполняться?  
 
Про обработчик ошибок я думала, но пока не знаю как его сделать :) Есть примеры кода?
 
макрос является частью приложения а не какого либо файла, в файле хранится его код.  
 
ошибку можно обойти так  
 
On Error Resume Next  
ActiveWorkbook.SaveAs DestPath & Application.PathSeparator & DestFileName & ".xls"  
If Err <> 0 Then Exit Sub  
On Error GoTo 0
 
Уф! Я уже дома. JessieFly, Что Вас смущает? Строка ThisWorkbook.Close Save = False корректна. Закроется та Книга, в которой "прописан" Ваш макрос. Приложение останется.
 
{quote}{login=The_Prist}{date=31.01.2010 09:51}{thema=Re: } Если закрыть этот файл, то проект с макросом из этого файла будет недоступен(за исключением случаев с вызовом макроса методом Run).{/post}{/quote}  
 
Вот про метод Run поподробнее пожалуйста!  
 
Провела простой эксперимент - строчку ThisWorkbook.Close False поставила раньше строки вывода сообщения об успешном завершении работы макроса - и сообщение не появилось, то бишь все-таки закрытие книги, которая содержит модуль с макросом, влечет за собой прекращение выполнения макроса.    
 
Как сделать так чтобы книга с макросом закрылась, а сам макрос доработал до конца?  
 
Юрий М, меня смущает что макрос в таком виде как он у меня есть, завершает работу не по штатному End sub, а вследствие закрытия книги, что неправильно. То есть так оно конечно работает, но это нехорошо.  
 
Dophin, очередное большое спасибо!
 
Считайте, что макрос это делает на последнем выдохе :-) И что в этом неправильно?    
Вот такой малюсенький макрос закроет Книгу:  
Sub Cls()  
ThisWorkbook.Close Save = False  
End Sub  
И что неправильного тут? А КАК нужно "правильно"
 
{quote}{login=Юрий М}{date=31.01.2010 10:33}{thema=Re: }{post}  
И что неправильного тут? А КАК нужно "правильно"{/post}{/quote}  
 
Если бы  знала как правильно, я бы не тратила ваше время :)  
 
Учту на будущее (потому что мне нужен еще один макрос :) ), что строчка ThisWorkbook.Close может быть только последней.  
 
А вот кстати, для макроса, записанного в личную книгу макросов, ThisWorkbook - книга из которой его вызвали или personal.xls?
 
Полагаю, что та, откуда вызывали. А чтобы не запутаться попробуйте закрывать так:  
Windows("ИмяКниги.xls").Close Save = False
Страницы: 1
Читают тему
Наверх