Данный макрос позволяет быстро (одним нажатием кнопки) пересохранить текущий файл Excel в другом формате.
Например, вы работаете с книгой Excel в формате Excel 97-2003 (расширение XLS), и вам понадобилось преобразовать этот файл в формат «двоичная книга Excel» (расширение XLSB)
Для чего это нужно? К примеру, файлы в формате XLSB занимают намного меньше места на диске, и не будут открываться в Excel 2007 и новее в режиме совместимости (еслои вам вдруг перестало хватать 65 тысяч строк)
Поместите этот макрос в любую из подключенных надстроек Excel (или в личную книгу макросов Personal.xlsb), и назначьте этот макрос кнопке на панели быстрого вызова:
Sub СохранениеВФорматеXLSB() On Error Resume Next: Err.Clear ' макрос работает только в Excel 2007 (и более новых версиях) If Val(Application.Version) < 12 Then Exit Sub ' получаем полный путь к текущему файлу Excel oldName$ = ActiveWorkbook.FullName ' выход, если файл уже в нужном формате (XLSB) If UCase$(oldName$) Like "*.XLSB" Then Exit Sub ' формируем новое имя файла (меняем расширение) newName$ = Left(oldName$, InStrRev(oldName$, ".")) & "xlsb" ' сохраняем файл под новым именем в формате XLSB ActiveWorkbook.SaveAs newName$, xlExcel12 ' удаляем прежний файл (в старом формате) If Err = 0 Then Kill oldName$ End Sub
Аналогично, если преобразовывать текущий файл в формат XLSX (не поддерживающий макросы), можно быстро и надёжно избавиться от всех макросов, имеющихся в файле:
Sub УдалениеМакросовИзКнигиEXCEL() On Error Resume Next: Err.Clear ' макрос работает только в Excel 2007 (и более новых версиях) If Val(Application.Version) < 12 Then Exit Sub ' получаем полный путь к текущему файлу Excel oldName$ = ActiveWorkbook.FullName ' выход, если файл уже в нужном формате (XLSX) If UCase$(oldName$) Like "*.XLSX" Then Exit Sub ' формируем новое имя файла (меняем расширение) newName$ = Left(oldName$, InStrRev(oldName$, ".")) & "xlsx" ' сохраняем файл под новым именем в формате XLSX ActiveWorkbook.SaveAs newName$, xlExcel12 ' удаляем прежний файл (в старом формате) If Err = 0 Then Kill oldName$ End Sub
Комментарии
Спасибо, Игорь!
В том и задумка, чтобы пересохранить файл в том формате Excel, где всё потеряется (и формы, и модули, и скрытые листы). Ведь если не разрешен "доступ к Visual Basic Project", то макросами сам проект VBA не удалишь (если я не ошибаюсь).
Я вчера воспользовался вашими макросами и получилось следующее (полностью работает только в Excel2003):
...
' удаление листов и VBA в т.ч. Application.DisplayAlerts = False
...
On Error Resume Next: Err.Clear
ThisWorkbook.Save
oldName$ = ActiveWorkbook.FullName
newname$ = oldName$
ThisWorkbook.SaveAs newname$, xlExcel4
If Err <> 0 Then Kill oldName$
ThisWorkbook.Close False
Т.е. при невыполнении определенных условий, файл сам себя убивает.
Как вы думаете, можно это програмно осуществить так, чтобы макрос работал начиная с Excel2003 и выше, не обращая внимание на то разрешен ли "доступ к Visual Basic Project" или нет.
Заранее спасибо!
С уважением, Антон
Здравствуйте, Антон
xlExcel4 - какой-то особо древний формат, не советую в нем сохранять (многое потеряться может, кроме макросов)
оптимален для этого формат XLSX (если у вас Excel версии 2007 или новее - то используйте этот формат)
ActiveWorkbook.SaveAs Filename & ".xlsx", xlOpenXMLWorkbook
Добрый день, Игорь!
Вы не могли бы помочь мне в следующем. У меня есть книга Excel2003 с макросами. Мне нужно средствами VBA сохранить ее в формате 4.0, чтобы уничтожить весь код VBA и скрытые листы, на тех Excel, где не разрешен "доступ к Visual Basic Project".
Код я вижу таким, но как избежать всплывающих окон, о том что часть данных будет утеряна и т.п. Важно чтобы этот файл "по-тихому" сохранился в старый формат, ничего и никуда не экспортируя.
Сам код:
Filename = ActiveWorkbook.Name
ActiveWorkbook.SaveAs Filename, xlExcel4
ActiveWindow.Close
Спасибо!
С уважением, Антон
Но и так не работает! Ругается на ActiveWorkbook.SaveAs newName$, xlExcel12
не подходит метод говорит
Нужно использовать тип файла не 12, а 51 (для версий от 2007)
Отправить комментарий