Сохранить файл Excel в другом формате

Данный макрос позволяет быстро (одним нажатием кнопки) пересохранить текущий файл 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)

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
         _             __  __              _ 
___ | |__ ___ \ \/ / __ _ | |
/ __| | '_ \ / _ \ \ / / _` | _ | |
| (__ | |_) | | __/ / \ | (_| | | |_| |
\___| |_.__/ \___| /_/\_\ \__,_| \___/
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.