Страницы: 1
RSS
Удаление макросов из файла по событию SaveAs?
 
Здравствуйте гуру и другие форумчане.  
Делаю макрос для расчета стоимости, а вот при сохранении хотелось бы удалить все макросы из сохраняемого файла.  
Вопрос:  
Как сделать так, чтобы макросы удалялись только из сохраняемого под другим именем файла? Т.е. на событие сохранить макросы не удалялись, а удалялись только на событие сохранить как...    
Я поставил Msgbox на событие Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) и он выскакивает и при нажатии кнопки сохранить и при нажатии кнопки сохранить как...
 
Видите-ли, Мультипликатор - для разных версий Экса код(оптимальный) может быть тоже абсолютно разным. Намек понятен? И правила перечесть не помешает.  
С уважением, Сергей.
Я сам - дурнее всякого примера! ...
 
Внутри события Workbook_BeforeSave проверяйте значение параметра SaveAsUI - при вызове через "сохранить" и "сохранить как..." значения этой переменной разные.  
 
Если SaveAsUI говорит о том, что было нажато "сохранить как..." :  
1) отменяете событие сохранения путём Cancel = TRUE  
2) запрашиваете через GetSaveAsFilename имя файла  
3) сохраняете КОПИЮ текущего файла под этим именем  
4) открываете созданную копию, и пересохраняете либо в формате, не поддерживающем макросы (типа XLSX или XML)? либо программно удаляете макросы.
 
{quote}{login=EducatedFool}{date=13.09.2011 08:59}{thema=}{post}Внутри события Workbook_BeforeSave проверяйте значение параметра SaveAsUI - при вызове через "сохранить" и "сохранить как..." значения этой переменной разные.  
 
Если SaveAsUI говорит о том, что было нажато "сохранить как..." :  
1) отменяете событие сохранения путём Cancel = TRUE  
2) запрашиваете через GetSaveAsFilename имя файла  
3) сохраняете КОПИЮ текущего файла под этим именем  
4) открываете созданную копию, и пересохраняете либо в формате, не поддерживающем макросы (типа XLSX или XML)? либо программно удаляете макросы.{/post}{/quote}  
Игорь, огромное спасибо!!! Ты, как всегда, великолепен!!!
 
еще вариант  
 
если макросы только в стандартном модуле/модуле класса  
 
1 отменяете сохранение  
2 создаете новую книгу  
3 копируете туда листы  
4 сохраняете новую книгу
Живи и дай жить..
 
{quote}{login=слэн}{date=14.09.2011 01:58}{thema=}{post}еще вариант  
 
если макросы только в стандартном модуле/модуле класса  
 
1 отменяете сохранение  
2 создаете новую книгу  
3 копируете туда листы  
4 сохраняете новую книгу{/post}{/quote}  
Макросы есть и в модулях, и в формах, и в листах. Так что не подойдет, наверное этот метод.
 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
If SaveAsUI = False Then 'Это если сохранить без как  
   Prompt = "Вы собираетесь сохранить изменения в существующем файле" & Chr(10) & _  
   "Нажмите ОК для сохранения" & Chr(10) & _  
   "Нажмите Cansel для отмены сохранения"  
   a = MsgBox(Prompt, vbOKCancel, "Сохранение...")  
   If a = 1 Then  
       Exit Sub  
   Else  
       Cancel = False  
       Exit Sub  
   End If  
End If  
If SaveAsUI = True Then 'Это если Сохранить как...  
End If  
 
Сделал вот такой вот код. Но он сохраняет в обоих случаях: и если нажимаешь ОК и   если нажимаешь Cancel!  
Чего-то я недопонимаю в этом вопросе. Ведь если присваиваешь Cancel = False, то должно не сохранять изменения, а оно сохраняет. В чем дело?
 
Всё. предыдущий пост снимается. Надо было Кансел делать Тру, а не Фалсе.
Страницы: 1
Читают тему
Наверх