Vba сохранить файл в формате xls
Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.
Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.
При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.
Сохранение производится в формате XLS (формат Excel 2003)
Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
то сохранения листа в файл не происходит.
PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.
Но, как ни странно, выполнение кода ActiveSheet.SaveAs "" приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs ""
Почему этот метод сохранения работает так нелогично - лично мне не понятно (видимо, Microsoft что-то там перемудрил)
Комментарии
тогда макрос будет выглядеть так:
Спасибо за ответ. все дело было в неверном указании количества листов. А переменная ПутьКПапке выбирается пользователем ранее. Правда теперь у меня встал следующий вопрос. Крайне не хочется позволять пользователю менять какие либо значения в исходном файле, для чего собственно и копируется часть листов в отдельный файл. А так как у меня параноя прокачена в 10 я поставил всем листам книги свойство very hidden. Есть ли возможность как-нибудь изменить код, что бы можно было производить операцию копирования листов с этим свойством?
Тимон, в моём коде проверяется, чтобы в копии файла был один лист:
исправьте 1 на 8, - и всё заработает
и ещё, - вы где-то потеряли строку, которая записывает в переменную ПутьКПапке собственно этот самый путь
в итоге, получится так:
Написал код по образцу:
Sub СохранитьЛистыВФайл()
Filename = "отчёт.xls"
' копируем активный лист (при этом создаётся новая книга)
Err.Clear: Worksheets(Array("Техн.тепло", "Вода", "Стоки", "отопление", "Эл .энергия", "Вода хоз.быт.", "Хозбытовые стоки", "воздух")).Copy: DoEvents
If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа
' убеждаемся, что активной книгой является копия листа
If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
' сохраняем файл под заданным именем в формате Excel 2003
ActiveWorkbook.SaveAs ПутьКПапке & Filename, xlWorkbookNormal
' закрываем сохранённый файл
' (удалите следующую строку, если закрывать созданный файл не требуется)
ActiveWorkbook.Close False
End If
End Sub
только он работает не так как нужно. копирует выбранные листы в файл, который называет "Книга1" открывает ее и дальше не сохраняет и не закрывает. подскажите пожалуйста, что мои кривые руки опять собрали в неверном порядке?
Владимир, мой макрос только сохраняет лист в файл.
Ширину столбцов макрос ну никак не может поменять.
Вам надо искать причину в чем-то другом, - возможно, есть где-то в файле другие макросы.
А имя файла в ячейке хранится вместе с расширением?
если нет, - то программно дописывайте расширение к тексту из ячейки, и проблема исчезнет
У меня имя файла по умолчанию(при открытии диалогового окна) берется из ячейки. Если в ячейки написано слово с точками например: "PHP.FGR.001" то в окне выбора файла не отображается заданное имя файла. А если без точек то все хорошо. Почему так происходит?
Чтобы не удалять все имена и связи с листа, - просто надо не копировать лист целиком,
а создать новый файл с одним листом, и на него вставить массив данных с листа "Store"
(скопировать только значения)
По сохранению файла на рабочем столе:
Доброго дня, нужна помощь, что и на что нужно изменить чтобы выбранный лист сохранялся на рабочий стол вне зависимости от точного адреса этого самого рабочего стола, на подобии команды .specialfolders("desktop") и как правильно её написать?
И второе, как убрать все BreakLink не прописывая их все вручную?
Прошу не ругать за мою корявую работу, а помочь с решением проблемы, только начинаю осваивать Excel в самостоятельном порядке.
Зарание спасибо
Здравствуйте, Андрей
Попробуйте так:
Добрый день!
Подскажите, пожалуйста, на Вашем примере, если мне нужно сохранить активный лист из книги в ту же папку, где и сама книга, но название ему присвоить по названию самой книги и добавить к нему название из определенной ячейки (например А1)(для Excel 2010)?
Что-то вроде
Filename$ = ThisWorkbook.Path & "\" & "здесь_имя_книги" & "_" & "А1" ".xlsx"
Всё гениальное просто. Спасибо за помощь. И отдельное спасибо за оперативность.
Здравствуйте, Константин
Всё просто:
Здравствуйте.
Нужно, чтобы имя файла задавалось автоматически по шаблону год-месяц-число-часы-минуты.xlsx
Пошёл по следующему пути: создал на листе ячейку, форматированную как Дата, и Вашим макросом, взятым из комментариев, присваиваю сохраняемому файлу имя, взятое из этой ячейки. Способ не самый удачный по причине того, что данные в этой ячейке нужно каждый раз обновлять, что не всегда случается (человеческий фактор). Можно ли реализовать задумку иным способом?
Вы мне в своё время помогли в макросом СОХРАНИТЬ КАК с переходом в нужную папку и заданием шаблона будущего файла.
Sub Сохранить_как_док()
' название подпапки, в которую по-умолчанию будет предложено сохранить файл
Const REPORTS_FOLDER = "E:\Rassil 2004\Документальные ведомости\"
Dim sFilename
' выбираем стартовую папку
ChDrive Left(REPORTS_FOLDER, 1): ChDir REPORTS_FOLDER
' вывод диалогового окна для запроса имени сохраняемого файла
sFilename = Application.GetSaveAsFilename("_2013.xls", "Отчёты Excel (*.xls*),", , _
"Введите имя файла для сохраняемого отчёта", "Сохранить")
' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
If VarType(sFilename) = vbBoolean Then Exit Sub
ActiveWorkbook.SaveAs sFilename, xlNormal
End Sub
Спасибо ещё раз большое, но возникла небольшая трудность.
Если исходный файл предварительно не сохранить принудительно, то при применения макроса СОХРАНИТЬ КАК да, создаётся сохранённый новый файл, а оригинал не сохраняется и теряет данные. Да, иелось ввиду, что не сам файл не сохраняется, а не сохраняются именно последние внесённые данные, которые не были сохранены вручную
Прошу подсказать, что необходимо добавить в макрос, что бы при СОХРАНИТЬ КАК и создавался новый файл и сохранялся оригинал?
И возможно ли дополнительно сделать, что бы оригинал при этом не закрывалчя?
Здравствуйте! Помогите пожалуйста.
У меня в Excelе есть анкета,хочу создать кнопку "сохранить" внизу анкеты, и чтобы оно сохраняло только изменения именно в этой анкете. И если ответили не на все вопросы, вышла надпись "Вы не ответили на все вопросы".
Это возможно?
Заранее всем спасибо!
А вы разместите кнопку на другом листе,
или же вообще без кнопки, - назначьте макросу комбинацию "горячих клавиш", - и проблема будет решена.
Спасибо, скачал "Макрос сохранения листа Excel в файл"
А как избавиться от кнопки макроса в копиях? Макросов там нет. а кнопки торчат.
Единственно у меня заработал код после добавления строки вверху:
Dim Filename As Variant
Поясните с чем это связано?
Уже разобрался. Все работает. Спасибо. Вопрос немного не по теме - нужен макрос, который бы при распечатки листа из одной книги заносил некоторые данные в другую книгу, закрытую. Смысл - есть 4 рабочих станции, с которых распечатывают заявления клиентов, нужно составлять реестр распечатанных заявлений на общем сетевом диске. Подскажите, есть ли что-то подобное уже в готовом виде или хотя бы примерно похожее, я бы допилил самостоятельно. Спасибо!
Здравствуйте, Максим.
После создания новой книги путем копирования листа (ActiveSheet.Copy), новая (созданная) книга ВСЕГДА становится активной.
Если вы ничего не меняли в коде, и в ваших файлах нет никаких макросов, которые могут влиять на активацию книг, - то все должно работать.
При работе макроса выясняю, что он сохраняет лист в отдельную книгу, но при открытии новой книги активное окно остается та, книга, из которой копируется лист, соответственно, условие If ActiveWorkbook.Worksheets.Count = 1 не выполняется. Что я делаю не так?
Для этого нужен уже другой макрос, более сложный
Могу сделать под заказ.
Как сохранить в файл только выбранный диапазон, с шапкой, выбранный сортировкой по столбцу.
Здравствуйте! Подскажите пожалуйста команду или сам макрос: я копирую значение ячеек из одной книги в другую, но в другой книге мне нужно к этому значению еще добавлять одну и ту же запись. вобщем как при копировании макросом к скопированному при вставке еще приписывалось бы определенная запись. пример: в первой книге столбик с данными. ставлю курсор на нужную мне запись которую надо скопировать в другую книгу. допустим А1 запись - TP010-0068287. а мне нужно что бы она скопировалась в другую открытую книгу но на конце бы приписывалось -16-01-20. то есть в итоге в другой книге в ячейке А1 была бы запись TP010-0068287-16-01-20. спасибо!
Ой! я только сейчас заметил что услуга платная
напишете на почту стоимость данного вопроса
Анатолий, раз, по вашим словам, в скриптах вы совсем ничего не понимаете, вариантов-то получается немного:
1) обратиться за помощью на форумы по Excel (прикрепив там пример файла)
2) продолжать разбираться самостоятельно
3) оформить заказ у меня на сайте (я сам разберусь, что к чему, и вы получите готовое решение)
я в скриптах мало что понимаю (точней совсем не понимаю) все делаю методом тыка
изменил верх и низ макроса по вашим рекомендациям
теперь происходит вот что
При запуске макроса (нажатии кнопки) выведено диалоговое окно выбора имени для сохраняемого файла, после чего 2 не активных листа будет сохранён под заданным именем в выбранной папки (без формул)
после нажатия сохранить
происходят дальнейшие действия
автоматически еще раз сохраняет файл (имя файла берет из активного листа ячейки "В2"(все правильно) в папку на рабочем столе (новую папку не создает если значение ячейки "С2" активного листа изменилось)
Здравствуйте, Анатолий.
Так попробуйте:
методом тыка у меня получилось вот что
On Error Resume Next
Folder$ = "C:\Documents and Settings\Admin\Рабочий стол\" & Worksheets(1).Range("C12") & "\"
MkDir Folder$ ' создаем папку, если её ещё нет
' формируем имя файла из текста ячеек
Filename = [B2] & ".xls"
'закрыть книгу после сохранения
ActiveWorkbook.Close True
On Error Resume Next
Kill tempfile
End Sub
теперь имя файла сохраняется значению ячейки активного листа, а папку не получается сделать так чтобы имя вставало из активного листа С2
в этом скрипте много лишнего из за этого немного подвисает но когда больше ничего нет приходится работать тем что есть
доброго времени суток.
подскажите что нужно убрать, и что нужно дописать или заменить, чтобы имя папки (сохранялось) = значение ячейки (С2) активного листа там где кнопка , а имя файла(сохранялось) = значение ячейки (В2) активного листа там где кнопка
если такой файл существует то перезаписать
On Error Resume Next
' название подпапки, в которую по-умолчанию будет предложено сохранить файл
Const REPORTS_FOLDER = "Отчёты\"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
' выбираем стартовую папку
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
1.) для офиса 2007 (без сохранения макросов )формат xlsx, для 2003?, как сохранять ни весь лист а определенную область?
2.) как с помощью макроса открыть word и скопировать туда данные с excel?
А какое отношение ваш вопрос имеет к теме статьи?
1. используйте ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook
Это сохранит книгу в формате XLSX - без поддержки макросов (соответственно, они все автоматически удалятся после закрытия файла)
Предварительно замените все формулы значениями, в цикле пройдясь по листам,
2. Скопируйте весь лист Excel, вставьте в Word, и в контекстном меню вставки выберите опцию «вставить как изображение»
Здравствуйте подскажите два макроса:
1. как сохранить всю книгу (или лист) без макросов и формул ?
2. как сохранить файл из excel в word(что бы в ворде отоброжалось как картинка)?
Спасибо, уже сам справился.
Добрый день! Помогите, пожалуйста, сохранить файл с именем из ячейки C2 в новую папку с именем, взятым из E3 . Заранее благодарен!
Александр, не поленитесь, - прочитайте все комментарии к статье.
В них вы найдёте ответы на свои вопросы.
Доброго времени суток! Как сохранить не активный лист, а несколько листов сразу (например 4) в одну книгу с задание имени файла по определенной ячейке?
Заранее спасибо!
Все нашел сам :)
вместо saveas надо использовать ExportAsFixedFormat
про имя из ячеек нашел сам. а как сохранять в pdf пока не разобрался. помогите плиз.
а может этот макрос сохранить в формате PDF с именем заданным из ячеек ?
Спасибо за замечание, исправил.
Спасибо за код.Все работает ка надо.
При сохранении файла не добавляется расширение к файлу из за банальной опечатки :) :
"Filename = Application.GetSaveAsFilename("отчёт.xls", "Отчёты Excel (*.xls*). )"
Поправьте на : "(*.xls)", просто лишний знак "*"
Прошу прощения, спасибо за помощь. Последний вопрос,скажите, отфильтрованную часть сохранить насколько сложно?
Мало того, я думал сохранит Excel только с данными, которые задал фильтрами
Прочитайте внимательно название статьи: "Сохранение ЛИСТА в файл"
Вот лист целиком и сохраняется.
Насчёт того, как включить запись макросов, - в интернете про это много написано,
в том числе и видеоинструкции есть (разобраться несложно)
Если разбираться некогда (или лень) - можете оформить заказ, я сам все сделаю (не бесплатно)
И навожу и отправляю. Он сохраняет как заданное имя и все. если только не прописывать имя.xlsx Мало того, я думал сохранит Excel только с данными, которые задал фильтрами, а он весь файл сохранил. Про удаление не знаю где включить запись( и как.
Сохраняет без расширения? Не верю.
Отправьте созданный файл сами себе по почте, или щелкните правой кнопкой на нём, и посмотрите свойства.
И расширение файла чудесным образом появится из ниоткуда)
По удалению столбцов - включите запись макросов, выполните необходимые действия, - получите нужный код.
Потом вставьте полученный код в макрос из статьи, перед строкой
галочку снял чтобы показывало расширение и при сохранении внизу показывает xlsx, но сохраняет все равно как файл без раширения. Удалить лишние столбцы вы имеете ввиду вручную? если нет, можно примерчик? очень благодарен вам за ответы.
Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно "разобрать", т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.
Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.
Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.
Способ 1. Простое разделение
Нажмите сочетание Alt+F11 или выберите в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor) , вставьте новый модуль через меню Insert - Module и скопируйте туда текст этого макроса:
Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.
Способ 2. Разделение с сохранением
При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:
Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например "D:\Отчеты\2012" и т.п.
Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла - параметр FileFormat:
Для основных типов файлов значения параметра FileFormat следующие:
- XLSX = 51
- XLSM = 52
- XLSB = 50
- XLS = 56
- TXT = 42
Способ 3. Сохранение в новые книги только выделенных листов
Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:
Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.
Способ 4. Сохранение только выделенных листов в новый файл
Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:
Способ 5. Сохранение листов как отдельных PDF-файлов
- для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
- листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
- книга должна быть сохранена на момент экспорта
Нужный нам код будет выглядеть следующим образом:
Способ 6. Готовый макрос из надстройки PLEX
Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:
Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.
Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.
При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.
Сохранение производится в формате XLS (формат Excel 2003)
Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
то сохранения листа в файл не происходит.
PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.
Но, как ни странно, выполнение кода ActiveSheet.SaveAs "" приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs ""
Почему этот метод сохранения работает так нелогично - лично мне не понятно (видимо, Microsoft что-то там перемудрил)
Комментарии
Спасибо. Разобрался. Нашёл ошибки в библиотеках.)
Спасибо. Всё запустил, но не работает. Пишет не найден проект или библиотека. Простите, не уточнил, поменял ещё саму систему (был XP стал Win7 x64).
Вот мой код:
Private Sub CommandButton2_Click()
On Error Resume Next
Const REPORTS_FOLDER = "C:\Users\. \. \. "
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
FileName = [b8] & "_" & [b6] & "_" & [b4] & "_" & Format([b2], "DDMMMMYY") & "_" & [c2] & ".xlsx"
Err.Clear: Worksheets(Array(. ", ". ")).Copy: DoEvents
If Err Then Exit Sub
If ActiveWorkbook.Worksheets.Count = 2 And ActiveWorkbook.Path = "" Then
ActiveWorkbook.SaveAs FileName, xlWorkbookNormal
ActiveWorkbook.Close False
End If
End Sub
Убедитесь, что макросы вообще включены в настройках Excel.
Перед запуском файла с макросами, необходимо выполнить следующее:
> найти файл с макросами в папке
> щелкнуть правой кнопкой мыши на файле - Свойства - Разблокировать - ОК
> и только после этого запускать
Перешёл с 2007 на Office 2016, перестали работать макросы. И этот. (((
Добрый день, подскажите, пожалуйста, что надо изменить в макросе, чтобы:
1. Он копировал не весь лист целеком, а только диапазон ВИДИМЫХ ячеек (A1:L50), т.к. этот диапазон только часть отфильтрованного списка.
2. Он копировал только значения, без формул ячеек.
Здравствуйте, Алексей
Да, можно такое сделать, - могу написать макрос под заказ.
Здравствуйте, Игорь.
Подскажите, пожалуйста, возможно ли такое, чтобы Лист можно было сохранять не единожды (по имени в одной ячейке) а сославшись на какой-либо диапазон ячеек. Есть потребность сделать в конкретной папке количество файлов соответствующее количеству дней в месяце(отчет на каждый день). Если в диапазоне ячеек указать даты месяца и по нажатию макрос сохранял бы, файлы с именем Даты.
Можете написать макрос под заказ? Мне надо до понедельника
Напишите ваши контакты, есть несколько задач.
Дмитрий, можем сделать вам макрос под заказ.
Оформляйте заказ, прикрепляйте файл (в который надо встроить макрос), и подробно описывайте, что куда в каком виде и под каким именем сохранять.
Дело в том, что в книге порядка 20-30 листов и каждый лист необходимо сохранить в отдельные папки, соответствующие имени листа.
Дмитрий, а куда уж проще-то. вы нажимаете одну кнопку «Печать», и получаете готовый файл JPG
Зачем ещё-то упрощать.
Можно, конечно, и макрос под заказ написать
Если в формат BMP (или EMF) картинку сохранять - то макрос несложный, если в формат JPG - то макрос сложнее будет (и дороже)
Но я бы на вашем месте не стал изобретать велосипед, а оставил бы все как есть.
Сохраняю листы в JPEG формате, при помощи виртуального принтера "universal document converter" возможно ли упростить процедуру сохранения активного листа?
On Error Resume Next
Const REPORTS_FOLDER = "Двери\"
' название подпапки, в которую по-умолчанию будет предложено сохранить файл
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
' создаём папку для файла, если её ещё нет
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
' выбираем стартовую папку
Filename = Range("a17") & ("b17") & ".xls"
' вывод диалогового окна для запроса имени сохраняемого файла
If VarType(Filename) = vbBoolean Then Exit Sub
' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n
Select Case Sheets(1).[Условие]
Case 1
Ar = Array(3)
Case Else
End Select
ActiveWorkbook.Close False
End Sub
pdfFilename = Application.DefaultFilePath & Application.PathSeparator & "имя файла" & Range("D9").Value & ".pdf"
WB.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=pdfFilename, OpenAfterPublish:=False
При этом файл создается с названием "имя файла.pdf" начисто игнорируя содержимое ячейки указанной.
Вот макрос, который сохраняет без ограничения 255-ти символов в ячейке:
Данный макрос позволяет быстро (одним нажатием кнопки) пересохранить текущий файл Excel в другом формате.
Например, вы работаете с книгой Excel в формате Excel 97-2003 (расширение XLS), и вам понадобилось преобразовать этот файл в формат «двоичная книга Excel» (расширение XLSB)
Для чего это нужно? К примеру, файлы в формате XLSB занимают намного меньше места на диске, и не будут открываться в Excel 2007 и новее в режиме совместимости (еслои вам вдруг перестало хватать 65 тысяч строк)
Поместите этот макрос в любую из подключенных надстроек Excel (или в личную книгу макросов Personal.xlsb), и назначьте этот макрос кнопке на панели быстрого вызова:
Аналогично, если преобразовывать текущий файл в формат XLSX (не поддерживающий макросы), можно быстро и надёжно избавиться от всех макросов, имеющихся в файле:
Комментарии
В том и задумка, чтобы пересохранить файл в том формате 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 или новее - то используйте этот формат)
Добрый день, Игорь!
Вы не могли бы помочь мне в следующем. У меня есть книга Excel2003 с макросами. Мне нужно средствами VBA сохранить ее в формате 4.0, чтобы уничтожить весь код VBA и скрытые листы, на тех Excel, где не разрешен "доступ к Visual Basic Project".
Код я вижу таким, но как избежать всплывающих окон, о том что часть данных будет утеряна и т.п. Важно чтобы этот файл "по-тихому" сохранился в старый формат, ничего и никуда не экспортируя.
Сам код:
Filename = ActiveWorkbook.Name
ActiveWorkbook.SaveAs Filename, xlExcel4
ActiveWindow.Close
Спасибо!
С уважением, Антон
Но и так не работает! Ругается на ActiveWorkbook.SaveAs newName$, xlExcel12
Процедура по нажатию кнопки-сохранить к примеру лист3 из текущей книги как отдельный файл.xls с названием текущей даты в отдельную папку. А также если файл с таким названием уже существует, тогда перезаписать! Подскажите пожалуйста! Заранее спасибо!
Макрос сохранение активного листа книги в отдельный файл
Код сохраняет файл, но с пустым содержанием. Подскажите, в чем может быть проблема? With.
Сохранение листа книги в отдельный файл в альбомном виде
Добрый день! Есть данный макрос, он сохраняет лист из книги в отдельный файл, но не совсем так как.
Сохранение книги как отдельный файл
Коллеги, доброго дня. Подскажите советом - нахожусь на развилке между удобством и автоматизацией.
Klim_ul, давай для начала с разделом определимся - это VB6 или VBA(Excel)?
Где такая кнопка есть - на форме, на листе, в тулбаре?
Отдельно от самой книги. например открыта Книга.xls состоящая из 3-х листов, далее на каждом из листов ввели какую либо информацию. Мне нужно сохранить только лишь Лист3 из этой книги, как отдельный файл.xls название которого будет текущая дата.
Добавлено через 2 минуты
Это VBA(Excel)! А кнопку создаем сами CommandButton и привязываем Макрос!
Добавлено через 40 секунд
Кнопка на листе!
Добавлено через 43 секунды
Апострофф, Буду оч. благодарен за помощь!
Решение
Огромное Всем спасибо.
Добавлено через 15 минут
И еще один вопрос. Где указать путь куда будет сохраняться файл. В данных примерах у меня сохраняет в текущую директорию, а мне нужно указать другой путь!
Апострофф, p = ThisWorkbook.Path
Diskretor, FileN = ThisWorkbook.Path & "\" & Date & ".xls"
ThisWorkbook.Path меняете на, например, "C:\temp\"
KoGG, Prefix = "C:\temp\"
Diskretor, Огромное спасибо и тысяча извинений, потому что у меня еще один вопрос. Теперь как сделать чтобы сохранение производилось в той папке где находится книга но в отдельную папку так чтобы это не влияло на первоначальный путь. Простите я сам не понял что написал.
Ладно покажу так. Например
Сечас у меня сохраняет "D:\Документы\Отчеты" Все отлично, но если поменять имя папки "Документы" на "База" то нужно заходить опять в код программы и менять путь. Вопрос как этого избежать. Сама книга находится в той же папке где папка для сохранения "Отчеты"
Решение
Плохо, когда ноги с головой не дружат:D
Решение
Апострофф, я Вам даже скажу больше:
если туда подставить строковой массив, в котором будут имена листов этой книги, то будет создана новая книга с копиями этих листов.
Т.е. код ниже создает копию этой книги со всеми листами, кроме последнего:
P.S. ради интереса проверил. Можно подставлять и Integer массив с номерами листов. Эффект будет такой же:
DanAttess, а почитать, что Diskretor постом выше написал не судьба?
Ваш код создаст две новые книги с одним листом в каждой, причём сохранит только последнюю!
Спасибо! Это мой первый опыт в VBA. Не судите строго!
Не подскажите, сложно ли сделать так, чтобы все выражения в скопированных листах были сохранены как значения?
Добавлено через 49 минут
В коде ниже сохранять как значение, если использовать массивы не получается:
Здравствуйте. В экселе не шибко силен. Кто-нибудь может выложить файл с таким примером: чтобы при нажатии кнопки "сохранить" сохранялся допустим лист 2 (на котором будет таблица с формулами), но чтобы сохранялся лист не с формулами, а со значениями, стиль шрифта, размеры столбцов, границы таблицы желательно оставить неизменными. При этом чтобы можно было выбирать путь сохранения и имя файла (или второй вариант - фиксированный путь сохранения и имя файла, допустим сделать 2 кнопки с разными способами сохранения). Честно пытался разобраться с представленными здесь способами, но знаний маловато. Думаю по примеру было бы проще сообразить что к чему
Здравствуйте. В экселе не шибко силен. Кто-нибудь может выложить файл с таким примером: чтобы при нажатии кнопки "сохранить" сохранялся допустим лист 2 .
Когда то очень давно писал что то похожее. Макрос копирует выделенные листы в новую книгу и удаляет все, что выходит за пределы печати. Также удаляет все скрытые строки и столбцы в страницах печати. Есть одна неприятность, если удаляемая ячейка объедененная, то теряется ее значение.
Читайте также: