Сохранить книгу vba: Метод Workbook. Save (Excel) | Microsoft Docs
Метод Workbook. Save (Excel) | Microsoft Docs
-
- Чтение занимает 2 мин
В этой статье
Сохраняет изменения указанной книги.Saves changes to the specified workbook.
СинтаксисSyntax
Expression. Сохранениеexpression.Save
Expression (выражение ) Переменная, представляющая объект Workbook .expression A variable that represents a Workbook object.
ПримечанияRemarks
Чтобы открыть файл книги, используйте метод Open .To open a workbook file, use the Open method.
Чтобы пометить книгу как сохраненную, не записывая ее на диск, задайте для свойства сохраненного свойства значение true.To mark a workbook as saved without writing it to a disk, set its Saved property to True.
При первом сохранении книги используйте метод SaveAs для указания имени файла.The first time you save a workbook, use the SaveAs method to specify a name for the file.
ПримерExample
В этом примере показано, как сохранить активную книгу.This example saves the active workbook.
ActiveWorkbook.Save
В этом примере показано, как сохранить все открытые книги, а затем закрыть Microsoft Excel.This example saves all open workbooks and then closes Microsoft Excel.
For Each w In Application.Workbooks
w.Save
Next w
Application.Quit
В этом примере показано использование события BeforeSave для проверки того, что определенные ячейки содержат данные, прежде чем можно будет сохранить книгу.This example uses the BeforeSave event to verify that certain cells contain data before the workbook can be saved. Книга не может быть сохранена до тех пор, пока не будут указаны данные в каждой из следующих ячеек: D5, D7, D9, D11, D13 и D15.The workbook cannot be saved until there is data in each of the following cells: D5, D7, D9, D11, D13, and D15.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'If the six specified cells do not contain data, then display a message box with an error
'and cancel the attempt to save.
If WorksheetFunction.CountA(Worksheets("Sheet1").Range("D5,D7,D9,D11,D13,D15")) < 6 Then
MsgBox "Workbook will not be saved unless" & vbCrLf & _
"All required fields have been filled in!"
Cancel = True
End If
End Sub
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Как на VBA сохранить файл Excel с названием, взятым из ячейки? | Info-Comp.ru
Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.
Исходные данные
Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.
Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.
Заметка! Этапы разработки программы – как создаются и проектируются программы?
Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.
Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.
Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.
Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.
Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».
Код процедуры
Sub SaveFile() 'Объявление переменных Dim CellValue As String Dim Path As String Dim FinalFileName As String 'Временно отключаем показ вспомогательных сообщений Application.DisplayAlerts = False 'Задаём каталог сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & "\" 'Получаем значение ячейки CellValue = Range("B14") 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True 'Сообщение с результатом выполнения процедуры MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).
В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).
Заметка! Статический анализ кода в теории и на практике.
Добавление кнопки в Excel для запуска макроса
Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».
Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».
В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.
Заметка! ТОП 7 популярных языков программирования.
Сохранение файла Excel с названием из ячейки — без привязки к ячейке
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
Замените код процедуры следующим кодом, который совсем немного, но изменен.
Sub SaveFile() 'Объявление переменных Dim CellValue As String Dim Path As String Dim FinalFileName As String 'Временно отключаем показ вспомогательных сообщений Application.DisplayAlerts = False 'Задаём каталог сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & "\" 'Проверка значения ячейки If ActiveCell.Value = "" Then MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!" Exit Sub End If 'Получаем значение активной ячейки CellValue = ActiveCell.Value 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).
Как видим, все отработало.
Сохранение файла Excel с названием, которое сформировано из значений двух ячеек
Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.
В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.
Код процедуры в данном случае будет выглядеть следующим образом.
Sub SaveFile() 'Объявление переменных Dim CellValue As String Dim Path As String Dim FinalFileName As String 'Временно отключаем показ вспомогательных сообщений Application.DisplayAlerts = False 'Задаём каталог сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & "\" 'Проверка значения ячеек B14 и D14 If Range("B14").Value = "" Or Range("D14").Value = "" Then MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!" Exit Sub End If 'Складываем значения из двух ячеек B14 и D14 CellValue = Range("B14").Value & " - " & Range("D14").Value 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
Запускаем макрос.
Все ОК, файл создан.
Заметка! Как измерить сложность кода программы при программировании?
Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.
Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.
Код процедуры
Sub SaveFile() 'Объявление переменных Dim CellValue As String Dim Path As String Dim FinalFileName As String 'Временно отключаем показ вспомогательных сообщений Application.DisplayAlerts = False 'Задаём каталог сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & "\" 'Проверка номера столбца If ActiveCell.Column <> 2 Then MsgBox "Указан некорректный столбец", vbCritical, "Ошибка!" Exit Sub End If 'Проверка значения ячейки If ActiveCell.Value = "" Then MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!" Exit Sub End If 'Получаем значение активной ячейки CellValue = ActiveCell.Value 'Смещаемся на 2 столбца, относительно активной ячейки ActiveCell.Offset(0, 2).Select 'Складываем значения из двух ячеек CellValue = CellValue & " - " & ActiveCell.Value 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.
Заметка! Опрос. Какой операционной системой Вы пользуетесь?
У меня на этом все, надеюсь, материал был Вам полезен, пока!
Нравится3Не нравится
VBA Excel. Рабочая книга (открыть, создать новую, закрыть)
Открытие книги Excel из кода VBA. Создание новой книги, присвоение ей имени. Обращение к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.
Открытие существующей книги
Существующая книга открывается из кода VBA Excel с помощью метода Open:
Workbooks.Open Filename:=»D:\test1.xls» |
или
Workbooks.Open («D:\test1.xls») |
В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверить существование файла можно с помощью функции Dir:
If Dir(«D:\test1.xls») = «» Then MsgBox «Файл не существует» Else MsgBox «Файл существует» End If |
Или, если файл существует, можно сразу его открыть:
If Dir(«D:\test1.xls») = «» Then MsgBox «Файл не существует» Else Workbooks.Open Filename:=»D:\test1.xls» End If |
Создание новой книги
Новая рабочая книга Excel создается в VBA с помощью метода Add:
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
Workbooks.Add ActiveWorkbook.SaveAs Filename:=»D:\test2.xls» |
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере – это «test2.xls».
Обращение к открытой книге
Обращение к активной книге:
Обращение к книге с выполняемым кодом:
Обращение к книге по имени:
Workbooks(«test1.xls») Workbooks(«test2.xls») |
Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.
Как закрыть книгу Excel из кода VBA
Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:
Workbooks(«test1.xlsx»).Close |
Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close – SaveChanges:
Сохранение макроса — Excel
Примечание:
Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим
ссылку на оригинал (на английском языке)
.
Создать макрос в Excel можно, запустив средство записи макросов или с помощью редактора Visual Basic для приложений (VBA). После создания макроса следует сохранить его для возможности повторного использования в текущей или в других книгах.
Сохранение макроса в текущей книге
Если понадобится использовать макрос только в той книге, где он был создан, нажмите кнопку Сохранить или Сохранить как так же, как при обычном сохранении. Но сохранение книги с макросами происходит несколько иначе, поскольку необходимо использовать специальный формат файла «с поддержкой макросов». Поэтому при попытке сохранить макрос Excel предложит два варианта:
-
Сохранить в виде книги с поддержкой макросов (XLSM-файл), выбрав Нет.
-
Сохранить в виде книги без поддержки макросов, выбрав Да.
Чтобы сохранить макрос как книгу с поддержкой макросов,
-
щелкните Нет.
-
В окне Сохранить как в раскрывающемся списке Тип файла выберите Книга Excel с поддержкой макросов.
-
Нажмите кнопку Сохранить.
Создание и сохранение макросов в личной книге
Чтобы макросы были доступны при каждом запуске Excel, создайте их в книге «Personal.xlsb». Это скрытая книга на вашем компьютере, которая открывается при каждом запуске Excel. Для получения сведений о выполнении этих действий см. статью Создание и сохранение всех макросов в одной книге.
См. также
Сохранение всех макросов в личной книге макросов
Краткое руководство: Создание макроса
Создание или удаление макроса
Запуск макроса
Excel vba сохранение книги Excelka.ru
Как на VBA сохранить файл Excel с названием, взятым из ячейки?
Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.
Исходные данные
Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.
Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.
Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.
Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.
Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.
Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.
Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».
Код процедуры
После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).
В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).
Добавление кнопки в Excel для запуска макроса
Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».
Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».
В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.
Сохранение файла Excel с названием из ячейки — без привязки к ячейке
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
Замените код процедуры следующим кодом, который совсем немного, но изменен.
Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).
Как видим, все отработало.
Сохранение файла Excel с названием, которое сформировано из значений двух ячеек
Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.
В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.
Код процедуры в данном случае будет выглядеть следующим образом.
Все ОК, файл создан.
Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.
Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.
Код процедуры
Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.
У меня на этом все, надеюсь, материал был Вам полезен, пока!
Сохранение листа в из книги как отдельный файл.xls
Макрос сохранение активного листа книги в отдельный файл
Код сохраняет файл, но с пустым содержанием. Подскажите, в чем может быть проблема? With.
Сохранение листа книги в отдельный файл в альбомном виде
Добрый день! Есть данный макрос, он сохраняет лист из книги в отдельный файл, но не совсем так как.
Сохранение книги как отдельный файл
Коллеги, доброго дня. Подскажите советом — нахожусь на развилке между удобством и автоматизацией.
Сохранение текущего листа Excel в отдельный файл
Доброго всем времени суток! Помогите справиться с небольшой проблемкой. Есть файл Excel с.
Сохранение листа книги в файле — проблема с защитой листа и привязкой макросов
С толкнулся с такой проблемой при сохранении листа в файле вот код который сохраняет лист в.
Klim_ul, давай для начала с разделом определимся — это VB6 или VBA(Excel)?
Где такая кнопка есть — на форме, на листе, в тулбаре?
Отдельно от самой книги. например открыта Книга.xls состоящая из 3-х листов, далее на каждом из листов ввели какую либо информацию. Мне нужно сохранить только лишь Лист3 из этой книги, как отдельный файл.xls название которого будет текущая дата.
Добавлено через 2 минуты
Это VBA(Excel)! А кнопку создаем сами CommandButton и привязываем Макрос!
Добавлено через 40 секунд
Кнопка на листе!
Добавлено через 43 секунды
Апострофф, Буду оч. благодарен за помощь!
Огромное Всем спасибо.
Добавлено через 15 минут
И еще один вопрос. Где указать путь куда будет сохраняться файл. В данных примерах у меня сохраняет в текущую директорию, а мне нужно указать другой путь!
Плохо, когда ноги с головой не дружат:D
Спасибо! Это мой первый опыт в VBA. Не судите строго!
Не подскажите, сложно ли сделать так, чтобы все выражения в скопированных листах были сохранены как значения?
Добавлено через 49 минут
В коде ниже сохранять как значение, если использовать массивы не получается:
Вот это почти похоже на правду. То что удаляет все за областью печати — это не страшно. При сохранении можно указать путь и имя, и что сохраняет значения, а не формулы — это все то что надо. Только как бы немного доработать, чтобы сохранялся не выделенный лист, а к примеру так: на первом листе будут какие-то расчеты и кнопка сохранить, а таблицы с результатами на втором и третьем листе. И вот при нажатии на кнопку сохранить, сохранялись бы второй и третий листы в отдельной книге.
Добавлено через 2 часа 30 минут
DanAttess, А можно увидеть файл с результатом сохранений?
Макрос сохранения листа Excel в файл
Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.
Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.
При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.
Сохранение производится в формате XLS (формат Excel 2003)
Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
то сохранения листа в файл не происходит.
PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.
Но, как ни странно, выполнение кода ActiveSheet.SaveAs » « приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs » «
Почему этот метод сохранения работает так нелогично — лично мне не понятно (видимо, Microsoft что-то там перемудрил)
- 145582 просмотра
Комментарии
Спасибо. Разобрался. Нашёл ошибки в библиотеках.)
Спасибо. Всё запустил, но не работает. Пишет не найден проект или библиотека. Простите, не уточнил, поменял ещё саму систему (был 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» возможно ли упростить процедуру сохранения активного листа?
Здравствуйте, Игорь. Будьте любезны, взгляните на код. Основная часть была взята с другого сайта, часть с Вашего. Суть такая: на первом листе исходные данные и кнопка, на третьем — расчеты с формулами. Необходимо чтобы при нажатии кнопки создавалась папка «Двери» в текущей папке, где лежит этот файл (а если она есть, то сохранялось в нее), а имя файла бралось с листа 1 из ячеек a17 & b17. Сохраняться должен третий лист (он скрыт), формулы на нем заменить на значения. После сохранения новая книга закрывается и выводится сообщение об удачном сохранении файла с именем из ячеек a17 & b17. Сам я методом тыка пытался воплотить это, но лист не хочет сохраняться с указанным именем (используется имя по умолчанию «Книга 2. Книга 3. ). Также непонятно мне как сделать чтобы выскакивало сообщение о результате сохранения. Подскажите пожалуйста.
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
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1)
For Each Sh In ThisWorkbook.Worksheets
ArAll(n) = Sh.Index
n = n + 1
Next
ThisWorkbook.Worksheets(ArAll).Copy
Application.Volatile
Application.Calculate
Application.ScreenUpdating = False
For Each n In Ar
With ActiveWorkbook.Worksheets(n).UsedRange.Cells
.Value = .Value
End With
Next
Erase ArAll: n = 0
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1 — (UBound(Ar) + 1))
For Each Sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(Sh.Index, Ar, 0)) Then
ArAll(n) = Sh.Index
n = n + 1
Else: If Sh.Visible = False Then Sh.Visible = True
End If
Next
ActiveWorkbook.Sheets(Ar(0)).Activate
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(ArAll).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close False
End Sub
Dim WB As Workbook
Dim ind As Integer
ind = ActiveSheet.Index
Application.DisplayAlerts = False
Set WB = Workbooks.Add
Dim li As Long
Application.DisplayAlerts = False
ind = 3
For n = ind To 2 Step -1
ThisWorkbook.Sheets(n).Copy Before:=WB.Sheets(1)
Next
pdfFilename = Application.DefaultFilePath & Application.PathSeparator & «имя файла» & Range(«D9»).Value & «.pdf»
WB.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=pdfFilename, OpenAfterPublish:=False
При этом файл создается с названием «имя файла.pdf» начисто игнорируя содержимое ячейки указанной.
Вот макрос, который сохраняет без ограничения 255-ти символов в ячейке:
Сохранение листов книги в файл Excel
Разберем код макроса, который позволяет скопировать все листы книги и сохранить их в отдельные файлы в Excel.
Задача разделения книги на отдельные листы часто встает перед нами, когда, например, необходимо разослать в подразделения компании в регионах файлы, содержащие информацию только по конкретному региону, чтобы пользователи не увидели лишней и ненужной информации, и множество подобных примеров.
Другими словами, изначально у нас имеется книга с множеством листов, которую мы хотим разделить на множество файлов, состоящих из листов исходной книги.
Как сохранить лист Excel в отдельный файл?
Для сохранения листа в отдельную книгу можно воспользоваться стандартными средствами Excel.
Нажимаем правой кнопкой мыши по имени листа в нижней панели и выбираем Переместить/скопировать:
Далее перемещаем лист в новую книгу, сохраняем её и даем название файлу.
Однако в случае большого количества листов, которые нужно сохранить, эта процедура может занять достаточно большое количество времени.
Если предположить, что на сохранение каждого листа тратится по 30 секунд, то для книги из 20 листов мы уже потратим 10 минут.
Поэтому, чтобы иметь возможность быстро сохранить листы в отдельные файлы воспользуемся возможностями VBA и напишем макрос для сохранения листов, который позволит производить эти действия за несколько секунд.
Макрос сохранения листа Excel в файл
Переходим в редактор Visual Basic, для этого в панели вкладок выбираем Разработчик -> Visual Basic (или воспользуемся сочетанием клавиш Alt + F11).
Создаем новый модуль и записываем в него макрос (как обычно, напротив каждой строчки дается пояснение к коду):
Как сделать «Сохранить как» в коде vba, сохраняя мою текущую книгу Excel с меткой даты?
У меня есть книга Excel, которая при нажатии кнопки формы я хочу сохранить копию книги с именем файла, являющимся текущей датой.
Я пытаюсь следующее ActiveWorkbook.SaveAs («filePathFormFlow To MSExcel» & Left(Now(), 10)) но получив Run-time error ‘1004’: Method ‘SaveAs’ of object’_Workbook’ failed.
может кто-нибудь помочь мне с этим? Я все еще очень новичок в разработке для Excel.
скорее всего, путь, к которому вы пытаетесь получить доступ, не существует. Кажется, вы пытаетесь сохранить в относительном месте, и у вас нет расширения файла в этой строке. Если вам нужно использовать относительные пути, вы можете проанализировать путь из ActiveWorkbook.FullName
изменить: Лучшим синтаксисом также будет
самый простой способ использовать эту функцию-начать с «записи макроса». Как только вы начнете запись, сохраните файл в нужном месте с нужным именем, а затем, конечно, установите тип файла, скорее всего, «Excel Macro Enabled Workbook»
остановить запись, и вы можете начать проверку кода.
Я написал код ниже, который позволяет сохранить книгу, используя путь, где файл был первоначально расположен, назвав его как » событие [дата в ячейке «А1″]»
скопируйте код в новый модуль, а затем напишите дату в ячейке» A1″, например 01-01-2016 -> назначьте sub кнопке и запустите. [Примечание] вам нужно сделать файл сохранения, прежде чем этот скрипт будет работать, потому что новая книга сохраняется в папку автосохранения по умолчанию!
возможно, ваш формат по умолчанию не соответствует расширению файла. Вы должны указать формат файла вместе с именем файла, убедившись, что формат соответствует расширению:
OTOH, я не вижу расширения на вашем .Сохранить как имя файла. Возможно, вам нужно предоставить его при выполнении этого программно. Это имеет смысл-не нужно предоставлять расширение из интерфейса GUI удобно, но мы, программисты, должны писать однозначный код. Я предлагаю добавление расширения и соответствующего формата. См.эта страница msdn для списка форматов файлов. Честно говоря, я не узнаю много о descripions.
xlExcel8 = 56-это .формат xls
xlExcel12 = 50-это .файл xlsb формате
xlOpenXMLWorkbook = 51 является .формат xlsx
xlOpenXMLWorkbookMacroEnabled = 52 является .формата xlsm
xlWorkbookDefault является и указан со значением 51, что озадачивает меня, так как я думал, что формат по умолчанию может быть изменен.
Я знаю, что это старый пост, но я искал что-то подобное. Я думаю, ваша проблема заключалась в том, что при использовании Now () выход будет «6/20/2014″. Это проблема для имени файла, поскольку в нем есть»/». Как вы знаете, нельзя использовать определенные символы в имени файла.
Я успешно использую следующий метод в одном файле
но с такой же ошибки. Только последняя строка придумывает ошибку
Создание и сохранение всех макросов в одной книге
Макросы и средства VBA находятся на вкладке Разработчик, которая по умолчанию скрыта, поэтому сначала нужно включить ее. Дополнительные сведения см. в статье Отображение вкладки «Разработчик».
Затем создайте макрос. Запись макроса, не выполняющего никаких действий, приведет к созданию личной книги макросов.
Дополнительные сведения о создании макросов см. в разделе Краткое руководство. Создание макроса.
-
Перейдите на вкладку разработчик и нажмите кнопку запись макроса.
-
В диалоговом окне запись макроса не пытайтесь ввести имя макроса в поле имя макроса. Вы можете принять имя, которое Excel предоставит вам, например Макро1, так как это просто временный макрос.
Когда вы начнете создавать собственные макросы, вам нужно будет присвоить им описательные имена, чтобы вы знали, что они представляют.
-
В поле Сохранить в выберите вариант Личная книга макросов и нажмите кнопку ОК. Это самый важный этап. Если у вас еще нет личной книги макросов, Excel создаст ее.
-
На вкладке разработчик нажмите кнопку Остановка записи, и в Excel будет создан личный макрос ворбук.
-
Когда вы закроете книгу, вам будет предложено сохранить как книгу, так и личную книгу макросов.
Чтобы просмотреть созданный макрос, выполните указанные ниже действия.
-
Перейдите в раздел разработчик > Visual Basic, чтобы запустить Редактор Visual Basic (VBE), в котором хранятся ваши макросы.
-
Вы можете найти свою личную книгу макросов на панели » Обозреватель проектов » в левой части экрана. Если вы не видите его, выберите вид > Обозреватель проектов.
-
Дважды щелкните проект VBA (личная. xlsb) > модули > Module1, чтобы найти записанные пустые макро1. Вы можете удалить его или добавить код позже.
Примечание: Когда вы регистрируете макрос в новом экземпляре Excel, VBA автоматически создает новую папку модулей и увеличивает ее число. Поэтому, если у вас уже есть Module1 и Модуле2, VBA создаст Модуле3. Вы можете переименовывать модули в окне » Свойства » в разделе « Обозреватель проектов «, чтобы они лучше отражали макросы внутри них.
Перемещение макросов на другой компьютер
Файл личных. xlsb хранится в папке XLStart. Если вы хотите совместно использовать свои макросы с другими пользователями, вы можете скопировать их в папку XLSTART на других компьютерах или скопировать некоторые макросы в файл Personal. xlsb на других компьютерах. Найти файл XLStart можно в проводнике Windows.
Если у вас есть несколько макросов, к которым вы хотите предоставить доступ другим пользователям, вы можете отправить им книгу, в которой они содержатся. Книгу можно также сделать доступной на общем сетевом диске или в библиотеке SharePoint Services.
Дополнительные сведения о копировании макросов из одной книги в другую см. в статье Копирование модуля макроса в другую книгу.
Убедитесь в том, что на ленте отображается вкладка Разработчик. По умолчанию вкладка Разработчик не видна, поэтому необходимо выполнить указанные ниже действия.
-
Выберите Excel > Параметры> Лента и панель.
-
В категории Настроить ленту в списке Основные вкладки установите флажок Разработчик, а затем нажмите кнопку Сохранить.
Затем создайте макрос. Запись макроса, не выполняющего никаких действий, приведет к созданию личной книги макросов.
Дополнительные сведения о создании макросов см. в разделе Краткое руководство. Создание макроса.
-
Перейдите на вкладку разработчик и нажмите кнопку запись макроса.
-
В диалоговом окне запись макроса не пытайтесь ввести имя макроса в поле имя макроса. Вы можете принять имя, которое Excel предоставит вам, например Макро1, так как это просто временный макрос.
Когда вы начнете создавать собственные макросы, вам нужно будет присвоить им описательные имена, чтобы вы знали, что они представляют.
-
В поле Сохранить в выберите вариант Личная книга макросов и нажмите кнопку ОК. Это самый важный этап. Если у вас еще нет личной книги макросов, Excel создаст ее.
-
На вкладке разработчик нажмите кнопку Остановка записи, и в Excel будет создан личный макрос ворбук.
-
Когда вы закроете книгу, вам будет предложено сохранить как книгу, так и личную книгу макросов.
Чтобы просмотреть созданный макрос, выполните указанные ниже действия.
-
На вкладке разработчик нажмите кнопку Visual Basic, чтобы запустить Редактор Visual Basic (VBE), в котором хранятся ваши макросы.
-
Вы можете найти свою личную книгу макросов на панели » Обозреватель проектов » в левой части экрана. Если вы не видите его, выберите вид > Обозреватель проектов.
-
Дважды щелкните проект VBA (личная. xlsb) > модули > Module1, чтобы найти записанные пустые макро1. Вы можете удалить его или добавить код позже.
Примечание: Когда вы регистрируете макрос в новом экземпляре Excel, VBA автоматически создает новую папку модулей и увеличивает ее число. Поэтому, если у вас уже есть Module1 и Модуле2, VBA создаст Модуле3. Вы можете переименовывать модули в окне » Свойства » в разделе « Обозреватель проектов «, чтобы они лучше отражали макросы внутри них.
Перемещение макросов на другой компьютер
Файл личных. xlsb хранится в папке автозагрузки системы. Если вы хотите совместно использовать свои макросы с другими пользователями, вы можете скопировать персональный. xlsb в папку «Автозагрузка» на других компьютерах или скопировать некоторые или все свои макросы в файл Personal. xlsb на других компьютерах. В Finder выберите команду Перейти, а затем нажмите и удерживайте клавишу Option, а затем выберите Библиотека. На панели Библиотека перейдите в раздел контейнеры групп > XYZ. Office (где XYZ — это текстовая строка, например «убф8т346г9») > содержимое пользователя > Запуск > Excel. Вставьте файл Personal. xlsb в папку Excel.
Если у вас есть несколько макросов, к которым вы хотите предоставить доступ другим пользователям, вы можете отправить им книгу, в которой они содержатся. Книгу можно также сделать доступной на общем сетевом диске или в библиотеке SharePoint Services.
Дополнительные сведения о копировании макросов из одной книги в другую см. в статье Копирование модуля макроса в другую книгу.
Сохранение листов книги в файл Excel
Разберем код макроса, который позволяет скопировать все листы книги и сохранить их в отдельные файлы в Excel.
Задача разделения книги на отдельные листы часто встает перед нами, когда, например, необходимо разослать в подразделения компании в регионах файлы, содержащие информацию только по конкретному региону, чтобы пользователи не увидели лишней и ненужной информации, и множество подобных примеров.
Другими словами, изначально у нас имеется книга с множеством листов, которую мы хотим разделить на множество файлов, состоящих из листов исходной книги.
Как сохранить лист Excel в отдельный файл?
Для сохранения листа в отдельную книгу можно воспользоваться стандартными средствами Excel.
Нажимаем правой кнопкой мыши по имени листа в нижней панели и выбираем Переместить/скопировать:
Далее перемещаем лист в новую книгу, сохраняем её и даем название файлу.
Однако в случае большого количества листов, которые нужно сохранить, эта процедура может занять достаточно большое количество времени.
Если предположить, что на сохранение каждого листа тратится по 30 секунд, то для книги из 20 листов мы уже потратим 10 минут.
Поэтому, чтобы иметь возможность быстро сохранить листы в отдельные файлы воспользуемся возможностями VBA и напишем макрос для сохранения листов, который позволит производить эти действия за несколько секунд.
Макрос сохранения листа Excel в файл
Переходим в редактор Visual Basic, для этого в панели вкладок выбираем Разработчик -> Visual Basic (или воспользуемся сочетанием клавиш Alt + F11).
Создаем новый модуль и записываем в него макрос (как обычно, напротив каждой строчки дается пояснение к коду):
Sub SaveSheetsAsFiles()
Application.ScreenUpdating = False ‘Отключение обновления экрана
Dim MySheet As Worksheet ‘Ввод переменной MySheet типа «лист»
Dim MyWorkbook As Workbook ‘Ввод переменной MyWorkbook типа «книга»
Set MyWorkbook = ActiveWorkbook
For Each MySheet In MyWorkbook.Worksheets ‘Цикл по каждому листу книги (файла)
MySheet.Copy ‘Копирование листа в новую книгу (файл)
ActiveWorkbook.SaveAs MyWorkbook.Path & «\» & MySheet.Name & «.xlsx» ‘Сохранение новой книги (файла)
ActiveWorkbook.Close ‘Закрытие новой книги (файла)
Next
Application.ScreenUpdating = True ‘Включение обновления экрана
End Sub
| Sub SaveSheetsAsFiles() Application.ScreenUpdating = False ‘Отключение обновления экрана Dim MySheet As Worksheet ‘Ввод переменной MySheet типа «лист» Dim MyWorkbook As Workbook ‘Ввод переменной MyWorkbook типа «книга» Set MyWorkbook = ActiveWorkbook For Each MySheet In MyWorkbook.Worksheets ‘Цикл по каждому листу книги (файла) MySheet.Copy ‘Копирование листа в новую книгу (файл) ActiveWorkbook.SaveAs MyWorkbook.Path & «\» & MySheet.Name & «.xlsx» ‘Сохранение новой книги (файла) ActiveWorkbook.Close ‘Закрытие новой книги (файла) Next Application.ScreenUpdating = True ‘Включение обновления экрана End Sub |
Переходим обратно в Excel и теперь можем воспользоваться макросом для разбиения листов по отдельным файлам.
Замечания
При работе с данным макросом обратите внимание на несколько важных аспектов:
- Код MyWorkbook.Path определяет текущее местоположения файла, и сохранение происходит в данную папку. Для изменения места сохранения можно вписать любой другой путь, например «C:\Выгрузка\Август»;
- Чтобы скопировать лист в другой файл без автоматического сохранения, то удаляем из кода макроса строку №8;
- Код ActiveWorkbook.Close закрывает новую созданную книгу, если в этом нет необходимости, то данную строку можно удалить (строка №9).
Удачи вам и до скорых встреч на страницах блога Tutorexcel.ru!
Поделиться с друзьями:
Поиск по сайту:
Метод Workbook.Save (Excel) | Документы Microsoft
- 2 минуты на чтение
В этой статье
Сохраняет изменения в указанной книге.
Синтаксис
выражение . Сохранить
выражение Переменная, представляющая объект Workbook .
Замечания
Чтобы открыть файл книги, используйте метод Открыть .
Чтобы пометить книгу как сохраненную без записи ее на диск, установите для свойства Saved значение True .
При первом сохранении книги используйте метод SaveAs , чтобы указать имя файла.
Пример
В этом примере сохраняется активная книга.
ActiveWorkbook.Save
В этом примере сохраняются все открытые книги, а затем закрывается Microsoft Excel.
для каждого w в приложении.
w.Save
Следующая ж
Application.Quit
В этом примере используется событие BeforeSave для проверки того, что определенные ячейки содержат данные, прежде чем можно будет сохранить книгу. Книгу нельзя сохранить, пока данные не будут в каждой из следующих ячеек: D5, D7, D9, D11, D13 и D15.
Частная вложенная книга_BeforeSave (ByVal SaveAsUI as Boolean, Cancel As Boolean)
'Если шесть указанных ячеек не содержат данных, отобразить окно сообщения с ошибкой
'и отмените попытку сохранения.Если WorksheetFunction.CountA (Worksheets ("Sheet1"). Range ("D5, D7, D9, D11, D13, D15")) <6, то
MsgBox "Книга не будет сохранена, если" & vbCrLf & _
"Все обязательные поля заполнены!"
Отмена = True
Конец, если
Конец подписки
Поддержка и отзывы
Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
.
Метод Workbook.SaveAs (Excel) | Документы Microsoft
- 3 минуты на чтение
В этой статье
Сохраняет изменения в книге в другом файле.
Примечание
Заинтересованы в разработке решений, расширяющих возможности Office на нескольких платформах? Ознакомьтесь с новой моделью надстроек Office.Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любые технологии веб-программирования, такие как HTML5, JavaScript, CSS3 и XML.
Синтаксис
выражение . SaveAs ( FileName , FileFormat , Password , WriteResPassword , ReadOnlyRecommended , CreateBackup , AccessMode , ConflictResolution , AddToMru , TextCode )
выражение Переменная, представляющая объект Workbook .
Параметры
Имя | Обязательно / Дополнительно | Тип данных | Описание |
---|---|---|---|
Имя файла | Дополнительно | Вариант | Строка, указывающая имя файла, который нужно сохранить. Вы можете включить полный путь; в противном случае Microsoft Excel сохранит файл в текущей папке. |
Формат файла | Дополнительно | Вариант | Формат файла, который будет использоваться при сохранении файла.Список допустимых вариантов см. В перечислении XlFileFormat . Для существующего файла форматом по умолчанию является последний указанный формат файла; для нового файла по умолчанию используется формат используемой версии Excel. |
Пароль | Дополнительно | Вариант | Строка с учетом регистра (не более 15 символов), указывающая пароль защиты, который должен быть присвоен файлу. |
WriteResPassword | Дополнительно | Вариант | Строка, указывающая пароль резервирования записи для этого файла.Если файл сохранен с паролем, а пароль не указан при открытии файла, файл открывается только для чтения. |
Только для чтения Рекомендуется | Дополнительно | Вариант | Истинно , чтобы при открытии файла отображалось сообщение с рекомендацией открыть файл только для чтения. |
CreateBackup | Дополнительно | Вариант | True для создания файла резервной копии. |
Режим доступа | Дополнительно | XlSaveAsAccessMode | Режим доступа к книге. |
Разрешение конфликтов | Дополнительно | XlSaveConflictResolution | Значение XlSaveConflictResolution , которое определяет, как метод разрешает конфликт при сохранении книги. Если установлено значение xlUserResolution , отображается диалоговое окно разрешения конфликтов. Если установлено значение xlLocalSessionChanges , изменения локального пользователя принимаются автоматически. Если установлено значение xlOtherSessionChanges , изменения из других сеансов автоматически принимаются вместо изменений локального пользователя. Если этот аргумент опущен, отображается диалоговое окно разрешения конфликта. |
AddToMru | Дополнительно | Вариант | True , чтобы добавить эту книгу в список недавно использованных файлов.Значение по умолчанию - Ложь . |
Кодовая страница текста | Дополнительно | Вариант | Игнорируется для всех языков в Microsoft Excel. ПРИМЕЧАНИЕ : Когда Excel сохраняет книгу в одном из CSV или текстовых форматов, которые указаны с помощью параметра FileFormat , он использует кодовую страницу, которая соответствует языку для языкового стандарта системы, используемого на текущем компьютере. . Этот системный параметр доступен на панели управления > Регион и язык > Вкладка в разделе Текущее местоположение . |
TextVisualLayout | Дополнительно | Вариант | Игнорируется для всех языков в Microsoft Excel. ПРИМЕЧАНИЕ : Когда Excel сохраняет книгу в одном из CSV или текстовых форматов, которые указаны с помощью параметра FileFormat , он сохраняет эти форматы в логической структуре. Если текст с направлением слева направо (LTR) встроен в текст с направлением справа налево (RTL) в файле, или наоборот, логическая компоновка сохраняет содержимое файла в правильном порядке чтения для всех языков в файле без относительно направления.Когда приложение открывает файл, каждый запуск символов LTR или RTL отображается в правильном направлении в соответствии с диапазонами значений символов внутри кодовой страницы (если только приложение не предназначено для отображения точной структуры памяти файла, например отладчик или редактор, используется для открытия файла). |
Местный | Дополнительно | Вариант | True сохраняет файлы на языке Microsoft Excel (включая настройки панели управления). Ложь (по умолчанию) сохраняет файлы на языке Visual Basic для приложений (VBA) (который обычно является американским английским языком, если только проект VBA, в котором запускается Workbooks.Open , не является старым интернационализированным проектом XL5 / 95 VBA). |
Примечания
Используйте надежные пароли, состоящие из прописных и строчных букв, цифр и символов. Слабые пароли не смешивают эти элементы.
- Надежный пароль: Y6dh! Et5
- Слабый пароль: House27
Используйте надежный пароль, который вы можете запомнить, чтобы вам не приходилось его записывать.
Пример
В этом примере создается новая книга, у пользователя запрашивается имя файла, а затем книга сохраняется.
Установить NewBook = Workbooks.Add
Делать
fName = Application.GetSaveAsFilename
Цикл до fName <> False
NewBook.SaveAs Имя файла: = fName
Поддержка и отзывы
Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
.
Полное руководство по книге VBA
«Мы тонем в информации, но голодаем». - Джон Нейсбитт
Этот пост представляет собой полное руководство по использованию книги VBA.
Если вы хотите использовать VBA для . Откройте книгу , затем ознакомьтесь с Open Workbook
.
Если вы хотите использовать VBA для , создайте новую книгу , перейдите в Create New Workbook
Для всех других задач книги VBA, ознакомьтесь с кратким руководством ниже .
Краткое руководство к книге VBA
В следующей таблице приведены краткие инструкции по основным задачам книги VBA.
Задача | Как выполнить |
---|---|
Доступ к открытой книге с использованием имени | Рабочие книги («Example.xlsx») |
Открытая книга доступа (первая открываемая) | Рабочие тетради (1) |
Открытая рабочая книга доступа (последняя открытая) | Рабочие книги (Workbooks.Счетчик) |
Доступ к активной книге | ActiveWorkbook |
Доступ к книге, содержащей код VBA | ThisWorkbook |
Объявить переменную книги | Dim wk As Workbook |
Назначьте переменную книги | Установить wk = Workbooks ("Example.xlsx") Set wk = ThisWorkbook Set wk = Workbooks (1) |
Активировать книгу | нед. Активировать |
Закрыть книгу без сохранения | нед.Закрыть SaveChanges: = False |
Закройте книгу и сохраните | нед. Закрыть SaveChanges: = True |
Создать новую книгу | Установить wk = Workbooks.Add |
Открыть книгу | Установить wk = Workbooks.Open ("C: \ Docs \ Example.xlsx") |
Открыть книгу только для чтения | Установить wk = Workbooks.Open ("C: \ Docs \ Example.xlsx", ReadOnly: = True) |
Книга чеков существует | Если Dir ("C: \ Docs \ book1.xlsx ") =" "Тогда MsgBox" Файл не существует. " EndIf |
Книга чеков открыта | См. Раздел «Открыть книгу чеков» ниже |
Список всех открытых книг | Для каждой недели в Application.Workbooks Debug.Print wk.FullName Next wk |
Открыть книгу с помощью диалогового окна «Файл» | См. Раздел «Диалог файла» ниже, функция ниже |
Сохранить книгу | нед. Сохранить |
Сохранить копию книги | нед.SaveCopyAs "C: \ Copy.xlsm" |
Копировать книгу, если закрыта | FileCopy «C: \ file1.xlsx», «C: \ Copy.xlsx» |
Книга «Сохранить как» | wk.SaveAs «Backup.xlsx» |
Веб-семинар по рабочим книгам VBA
Если вы являетесь участником веб-сайта, щелкните изображение ниже, чтобы перейти к веб-семинару.
( Примечание: участники веб-сайта имеют доступ к полному архиву вебинаров.)
Начало работы с книгой VBA
Мы можем получить доступ к любой открытой рабочей книге , используя код Workbooks ( «Пример .xlsm “ ). Просто замените Example.xlsm на имя книги, которую вы хотите использовать.
В следующем примере показано, как писать в ячейку на листе. Вы заметите, что нам пришлось указать книгу, лист и диапазон ячеек.
https://excelmacromastery.com/ Публичная подписка WriteToA1 () 'Записывает 100 в ячейку A1 рабочего листа "Sheet1" в MyVBA.xlsm. Рабочие тетради ("MyVBA.xlsm"). Рабочие листы ("Sheet1").Диапазон ("A1") = 100 Конец подписки
Этот пример может немного сбить с толку нового пользователя, но на самом деле он довольно прост.
Первая часть до десятичной точки - это рабочая книга, вторая часть - это рабочий лист, а третья - это диапазон. Вот еще несколько примеров записи в ячейку
https://excelmacromastery.com/ Публичная подписка WriteToMulti () 'Записывает 100 в ячейку A1 рабочего листа "Sheet1" в MyVBA.xlsm. Рабочие тетради ("MyVBA.xlsm "). Рабочие листы (" Sheet1 "). Диапазон (" A1 ") = 100 'Записывает «Джон» в ячейку B1 рабочего листа «Sheet1» в MyVBA.xlsm. Рабочие книги ("MyVBA.xlsm"). Рабочие листы ("Sheet1"). Range ("B1") = "John" 'Записывает 100 в ячейку A1 рабочего листа «Учетные записи» в MyVBA.xlsm. Рабочие книги ("MyVBA.xlsm"). Рабочие листы ("Учетные записи"). Диапазон ("A1") = 100 'Записывает дату в ячейку D3 рабочего листа Sheet2 в Book.xlsc Рабочие книги ("Book.xlsx"). Рабочие листы ("Sheet2"). Range ("D3") = "1 \ 1 \ 2016" Конец подписки
Здесь вы можете увидеть простой шаблон.Вы можете писать в любую ячейку на любом листе из любой книги. Просто измените имя книги, имя листа и диапазон в соответствии с вашими потребностями.
Взгляните на часть рабочей тетради
Книги ("Example.xlsx")
Ключевое слово Workbooks относится к совокупности всех открытых книг. Добавление имени книги в коллекцию дает нам доступ к этой книге. Когда у нас есть объект, мы можем использовать его для выполнения задач с книгой.
Устранение неполадок с коллекцией книг
При использовании коллекции книг для доступа к книге может появиться сообщение об ошибке:
Ошибка выполнения 9: индекс вне допустимого диапазона.
Это означает, что VBA не может найти книгу, которую вы передали в качестве параметра.
Это может произойти по следующим причинам
- Книга в настоящее время закрыта.
- Вы неправильно написали имя.
- Вы создали новую книгу (e.г. Book1) и попытался получить к нему доступ с помощью Workbooks («Book1.xlsx»). Его имя не Book1.xlsx , пока оно не будет сохранено в первый раз.
- (только Excel 2007/2010) Если вы используете два экземпляра Excel, то «Книги» () относятся только к книгам, открытым в текущем экземпляре Excel.
- Вы передали число в качестве индекса, и оно больше, чем количество открытых книг, например вы использовали рабочие книги (3), и открыты только две книги.
Если не удается устранить ошибку, воспользуйтесь любой из функций из раздела «Поиск всех открытых книг».Они напечатают имена всех открытых книг в окне немедленного выполнения (Ctrl + G).
Примеры использования книги VBA
Следующие примеры показывают, что вы можете делать с книгой.
Примечание: Чтобы попробовать этот пример, создайте две открытые книги с именами Test1.xlsx и Test2.xlsx .
https://excelmacromastery.com/ Public Sub WorkbookProperties () 'Печатает количество открытых книг Отлаживать.Распечатать Workbooks.Count 'Печатает полное имя книги Debug.Print Workbooks ("Test1.xlsx"). FullName 'Отображает полное имя книги в диалоговом окне сообщения Книги MsgBox ("Test1.xlsx"). FullName 'Печатает количество листов в Test2.xlsx Debug.Print Workbooks ("Test2.xlsx"). Worksheets.Count 'Печатает имя текущего активного листа Test2.xlsx Debug.Print Workbooks ("Test2.xlsx"). ActiveSheet.Name 'Закрывает книгу под названием Test1.xlsx Книги ("Test1.xlsx"). Закрыть 'Закрывает книгу Test2.xlsx и сохраняет изменения Книги ("Test2.xlsx"). Закройте SaveChanges: = True Конец подписки
Примечание: В примерах кода я использую Debug.Print много. Эта функция печатает значения в непосредственном окне. Чтобы просмотреть это окно, выберите в меню View-> Immediate Window (сочетание клавиш Ctrl + G)
Доступ к книге VBA по индексу
Вы также можете использовать номер Index с Workbooks () . Индекс относится к порядку открытия или создания книги.
Рабочие книги (1) относятся к книге, которая была открыта первой. Рабочие книги (2) относятся к книге, которая была открыта второй, и так далее.
'Первая открытая рабочая тетрадь Отладка. Печать книг (1). Имя 'Третья открытая рабочая тетрадь Отладка. Печать книг (3). Имя 'Последняя открытая рабочая тетрадь Отладка.Печать книг (Workbooks.Count) .Name
В этом примере мы использовали рабочих книг.Подсчитайте . Это количество книг, которые в настоящее время находятся в коллекции Workbooks. То есть количество рабочих книг, открытых в данный момент. Таким образом, использование его в качестве индекса дает нам последнюю открытую книгу
Использование индекса бесполезно, если вам действительно не нужно знать порядок. По этой причине вам следует избегать его использования. Вместо этого следует использовать имя книги с Workbooks () .
Поиск всех открытых книг
Иногда может потребоваться получить доступ ко всем открытым книгам.Другими словами, все элементы в коллекции Workbooks () .
Это можно сделать с помощью цикла For Each.
https://excelmacromastery.com/ Общедоступная подписка PrintWrkFileName () 'Распечатывает полное имя всех открытых книг Dim wrk As Workbook Для каждой работы в рабочих тетрадях Debug.Print wrk.FullName Следующая работа Конец подписки
Вы также можете использовать стандартный цикл For для доступа ко всем открытым книгам
https: // excelmacromastery.com / Общедоступный Sub PrintWrkFileNameIdx () 'Распечатывает полное имя всех открытых книг Тусклый я как долго Для i = 1 To Workbooks.Count Отладка.Печать книг (i) .FullName Далее я Конец подписки
Для доступа к книгам подойдет любой из этих циклов. Стандартный цикл For полезен, если вы хотите использовать другой порядок или вам нужно использовать счетчик.
Примечание: Оба примера читаются в порядке от первого открытого до последнего открытого.Если вы хотите читать в обратном порядке (от последнего к первому), вы можете сделать это
https://excelmacromastery.com/ Общедоступная подпрограмма PrintWrkFileNameIdxRev () 'Распечатывает полное имя всех открытых книг 'в обратном порядке. Тусклый я как долго Для i = Workbooks.Count To 1 Step -1 Отладка.Печать книг (i) .FullName Далее я Конец подписки
Открытая рабочая тетрадь
До сих пор мы имели дело с уже открытыми книгами.Конечно, необходимость вручную открывать книгу перед запуском макроса не позволяет автоматизировать задачи. Задача Open Workbook должна выполняться VBA.
Следующий код VBA открывает книгу «Book1.xlsm» в папке «C: \ Docs»
https://excelmacromastery.com/ Публичная подписка OpenWrk () 'Откройте книгу и распечатайте количество листов, которые она содержит Workbooks.Open ("C: \ Docs \ Book1.xlsm") Отлаживать.Печатные книги ("Book1.xlsm"). Worksheets.Count 'Закройте книгу без сохранения Книги ("Book1.xlsm"). Закройте saveChanges: = False Конец подписки
Рекомендуется проверить, действительно ли книга существует, прежде чем пытаться ее открыть. Это предотвратит появление ошибок. Функция Dir позволяет легко это сделать.
https://excelmacromastery.com/ Публичная подписка OpenWrkDir () Если Dir ("C: \ Docs \ Book1.xlsm ") =" "Тогда 'Файл не существует - сообщить пользователю MsgBox «Не удалось открыть книгу. Убедитесь, что она существует» Еще 'открыть книгу и что-то с ней сделать Workbooks.Open ("C: \ Docs \ Book1.xlsm") Конец, если Конец подписки
Проверить наличие открытой книги
Если вы открываете книгу как только для чтения , не имеет значения, открыта ли она уже. Однако, если вы собираетесь обновить данные в книге, рекомендуется проверить, открыта ли она уже.
Приведенную ниже функцию можно использовать для проверки, открыта ли книга в данный момент. Если нет, то откроется книга. В любом случае у вас будет открытая книга.
(Код ниже взят из этой записи StackOverFlow.)
https://excelmacromastery.com/ Функция GetWorkbook (ByVal sFullFilename как строка) как рабочая книга Dim sFilename как строка sFilename = Dir (sFullFilename) При ошибке Возобновить Далее Dim wk As Workbook Установить wk = Workbooks (sFilename) Если wk - ничто, тогда Установите wk = Workbooks.Открыть (sFullFilename) Конец, если При ошибке Перейти к 0 Установите GetWorkbook = wk Конечная функция
Эту функцию можно использовать так
https://excelmacromastery.com/ Sub ExampleOpenWorkbook () Dim sFilename как строка sFilename = "C: \ Docs \ Book2.xlsx" Dim wk As Workbook Установите wk = GetWorkbook (sFilename) Конец подписки
Этот код подходит для большинства ситуаций.Однако, если книга может быть в настоящее время открыта в режиме только для чтения или может быть открыта другим пользователем, вы можете использовать несколько иной подход.
Простой способ справиться с этим в этом сценарии - настоять на том, чтобы файл был закрыт для успешного выполнения приложения. Вы можете использовать приведенную ниже функцию, чтобы просто проверить, открыт ли уже файл, и, если да, сообщить пользователю, что он должен быть сначала закрыт.
(приведенный ниже код также взят из этой записи StackOverFlow)
https: // excelmacromastery.com / 'Функция проверки, открыта ли уже книга Функция IsWorkBookOpen (strBookName As String) как Boolean Dim oBk As Workbook При ошибке Возобновить Далее Установите oBk = Workbooks (strBookName) При ошибке GoTo 0 Если не oBk - это ничто, тогда IsWorkBookOpen = True Конец, если Конечная функция
Пример использования этой функции показан ниже. В этом случае, если рабочая книга уже открыта, вы сообщаете пользователю, что она должна быть закрыта, чтобы макрос продолжил работу.
https://excelmacromastery.com/ Sub ExampleUse () Dim sFilename как строка sFilename = "C: \ temp \ writedata.xlsx" Если IsWorkBookOpen (Dir (sFilename)) = True, то MsgBox «Файл уже открыт. Закройте файл и снова запустите макрос». Выход из подводной лодки Конец, если 'Напишите сюда в рабочую тетрадь Конец подписки
Если вам нужно проверить, открыта ли книга в другом экземпляре Excel, вы можете использовать атрибут ReadOnly книги.Будет установлено значение true, если он открыт в другом экземпляре.
Закрыть рабочую книгу
Закрыть книгу в Excel VBA очень просто. Вы просто вызываете метод Close книги.
нед.Закрыть
Обычно, когда вы закрываете книгу в VBA, вы не хотите видеть сообщения из Excel, спрашивающие, хотите ли вы сохранить файл.
Вы можете указать, сохранять книгу или нет, и тогда сообщения Excel не будут отображаться.
'Не сохранять изменения wk.Close SaveChanges: = False 'Сохранить изменения wk.Close SaveChanges: = True
Очевидно, вы не можете сохранить изменения в книге, которая в настоящее время открыта только для чтения.
Сохранить книгу
Мы только что видели, что вы можете сохранить книгу, когда закрываете ее. Если вы хотите сохранить его на любом другом этапе, вы можете просто использовать метод Сохранить
нед.Сохранить
Вы также можете использовать метод SaveAs
wk.Save как "C: \ Backups \ accounts.xlsx"
Метод Workbook SaveAs имеет двенадцать параметров, которые позволяют добавить пароль, сделать файл доступным только для чтения и т. Д. Вы можете увидеть подробности здесь.
Вы также можете использовать VBA для сохранения книги в виде копии с помощью SaveCopyAs
wk.SaveCopyAs "C: \ Docs \ Copy.xlsm "
Копия книги
Если книга открыта, вы можете использовать два метода, описанные в предыдущем разделе, для создания копии, то есть SaveAs и SaveCopyAs .
Если вы хотите скопировать книгу, не открывая ее, вы можете использовать FileCopy , как показано в следующем примере
Public Sub CopyWorkbook () FileCopy "C: \ Docs \ Docs.xlsm", "C: \ Docs \ Example_Copy.xlsm" Конец подписки
Использование диалогового окна файла для открытия книги
В предыдущем разделе показано, как открыть книгу с заданным именем.Иногда вы можете захотеть, чтобы пользователь выбрал книгу. Вы можете легко использовать диалоговое окно Windows File Dialog , показанное здесь.
Диалог файла Windows
FileDialog настраивается, и вы можете использовать его для
- Выберите файл.
- Выберите папку.
- Откройте файл.
- «Сохранить как» файл.
Если вы просто хотите, чтобы пользователь выбрал файл, вы можете использовать функцию GetOpenFilename.
Следующая функция открывает книгу с помощью диалогового окна "Файл". Функция возвращает полное имя файла, если файл был выбран. Если пользователь отменяет, отображается сообщение и возвращается пустая строка.
https://excelmacromastery.com/ Открытая функция UserSelectWorkbook () как строка При ошибке Перейти к ErrorHandler Dim sWorkbookName As String Dim FD как FileDialog Установите FD = Application.FileDialog (msoFileDialogFilePicker) 'Открыть диалоговое окно файла С FD 'Установить заголовок диалога .Title = "Пожалуйста, выберите файл" 'Добавить фильтр .Filters.Добавьте «Файлы Excel», «* .xls; *. Xlsx; *. Xlsm». 'Разрешить выбор только одного файла .AllowMultiSelect = Ложь 'Показать диалог .Показать Если .SelectedItems.Count> 0 Тогда UserSelectWorkbook = .SelectedItems (1) Еще MsgBox «Выбор файла отменен». UserSelectWorkbook = "" Конец, если Конец с 'Очистить Установите FD = Nothing Готово: Функция выхода ErrorHandler: MsgBox "Ошибка:" + Err.Описание Конечная функция
Когда вы вызываете эту функцию, вы должны проверить, отменяет ли пользователь диалог. В следующем примере показано, как легко вызвать функцию UserSelectWorkbook и обработать случай отмены пользователем
.
https://excelmacromastery.com/ Открытый Sub TestUserSelect () Dim userBook As Workbook, sFilename As String 'Вызов функции UserSelectworkbook sFilename = UserSelectWorkbook () 'Если имя файла возвращается пустым, пользователь отменил Если sFilename "" Тогда 'Откройте книгу и что-нибудь с ней сделайте Установите userBook = Workbooks.Открыть (sFilename) Конец, если Конец подписки
Вы можете настроить диалоговое окно, изменив заголовок, фильтры и AllowMultiSelect в функции UserSelectWorkbook .
Использование ThisWorkbook
Существует более простой способ получить доступ к текущей книге, чем использование Workbooks () . Вы можете использовать ключевое слово ThisWorkbook . Это относится к текущей книге, то есть книге, содержащей код VBA.
Если наш код находится в книге, вызовите MyVBA.xlsm, тогда ThisWorkbook и Workbooks («MyVBA.xlsm») относятся к той же книге.
Использование ThisWorkbook более полезно, чем использование Workbooks () . С ThisWorkbook нам не нужно беспокоиться об имени файла. Это дает нам два преимущества:
- Изменение имени файла не повлияет на код
- Копирование кода в другую книгу не требует изменения кода
Эти преимущества могут показаться очень незначительными.На самом деле ваши имена файлов будут постоянно меняться. Использование ThisWorkbook означает, что ваш код по-прежнему будет работать нормально.
В следующем примере показаны две строки кода. Один использует ThisWorkbook , а другой - Workbooks () . Тот, который использует рабочие книги, больше не будет работать, если имя MyVBA.xlsm изменится.
https://excelmacromastery.com/ Общедоступная подписка WriteToCellUsingThis () Обе строчки делают одно и то же.Debug.Print ThisWorkbook.FullName Debug.Print Workbooks ("MyVBA.xlsm"). FullName Конец подписки
Использование ActiveWorkbook
ActiveWorkbook относится к рабочей книге, которая в настоящее время активна. Это тот, который пользователь щелкнул в последний раз.
Поначалу это может показаться полезным. Проблема в том, что любую книгу можно активировать простым щелчком мыши. Это означает, что вы можете легко записать данные не в ту книгу.
Использование ActiveWorkbook также затрудняет чтение кода. Из кода может быть не очевидно, какая книга должна быть активной.
Надеюсь, я ясно дал понять, что вам следует избегать использования ActiveWorkbook , если в этом нет необходимости. Если нужно, будьте очень осторожны.
Примеры доступа к книге
Мы рассмотрели все способы доступа к книге. В следующем коде показаны примеры этих способов
https: // excelmacromastery.com / Общедоступные вспомогательные книги 'Это книга, которая уже открыта и называется MyVBA.xlsm Debug.Print Workbooks ("MyVBA.xlsm"). FullName 'Книга, содержащая этот код Debug.Print ThisWorkbook.FullName 'Первая открытая книга Отладка.Печать книг (1) .FullName 'Последняя открытая рабочая книга Отладка.Печать книг (Workbooks.Count) .FullName 'Текущая активная книга Отлаживать.Распечатать ActiveWorkbook.FullName 'Рабочая тетрадь не указана - будет использоваться активная Debug.Print Worksheets ("Sheet1"). Имя 'Закрытая книга под названием Book1.xlsm в папке C: \ Docs Workbooks.Open ("C: \ Docs \ Book1.xlsm") Debug.Print Workbooks ("Book1.xlsm"). FullName Рабочие тетради ("Book1.xlsm"). Закрыть Конец подписки
Объявление переменной книги VBA
Причина объявления переменной книги состоит в том, чтобы упростить чтение и понимание кода.Преимущество легче увидеть на примере
https://excelmacromastery.com/ Публичная подпрограмма OpenWrkObjects () Dim wrk As Workbook Установите wrk = Workbooks.Open ("C: \ Docs \ Book1.xlsm") 'Распечатать количество листов в каждой книге Debug.Print wrk.Worksheets.Count Debug.Print wrk.Name wrk.Close Конец подписки
Вы можете установить переменную книги с помощью любого из методов доступа, которые мы видели.
Ниже показан тот же код без переменной книги
https://excelmacromastery.com/ Публичная подпрограмма OpenWrkNoObjects () Workbooks.Open ("C: \ Docs \ Book1.xlsm") Debug.Print Workbooks ("Book2.xlsm"). Worksheets.Count Debug.Print Workbooks ("Book2.xlsm"). Имя Рабочие тетради ("Book2.xlsm"). Закрыть Конец подписки
В этих примерах разница несущественная. Однако, когда у вас много кода, использование переменной полезно, особенно для рабочих таблиц и диапазонов, где имена обычно длинные. E.г. thisWorkbook.Worksheets («Sheet1»). Range («A1») .
Переменной книги можно присвоить имя типа wrkRead или wrkWrite. Тогда вы сразу поймете, для чего используется эта книга.
Создать новую книгу
Чтобы создать новую книгу, вы используете функцию Рабочие книги Добавить . Эта функция создает новую пустую книгу. Это то же самое, что выбрать «Новая книга» в меню «Файл Excel».
Когда вы создаете новую книгу, вы, как правило, хотите сохранить ее.В следующем коде показано, как это сделать.
https://excelmacromastery.com/ Общедоступная подписка AddWordbook () Dim wrk As Workbook Установить wrk = Workbooks.Add 'Сохранить как xlsx. Это значение по умолчанию. wrk.SaveAs "C: \ Temp \ Example.xlsx" 'Сохранить как книгу с поддержкой макросов wrk.SaveAs "C: \ Temp \ Example.xlsm", xlOpenXMLWorkbookMacroEnabled Конец подписки
Когда вы создаете новую книгу, она обычно состоит из трех листов.Это определяется свойством Application.SheetsInNewWorkbook .
Если вы хотите, чтобы в новой книге было другое количество листов, измените это свойство перед созданием новой книги. В следующем примере показано, как создать новую книгу с семью листами.
https://excelmacromastery.com/ Общедоступная подписка AddWordbookMultiSheets () 'Сохранить значение SheetsInNewWorkbook, чтобы мы могли сбросить его позже Тусклый листCnt по длине sheetCnt = Приложение.ТаблицыInNewWorkbook 'Установить листы в новой книге на 7 Application.SheetsInNewWorkbook = 7 'Рабочая тетрадь будет создана из 7 листов Dim wrk As Workbook Установить wrk = Workbooks.Add 'Отображение количества листов Debug.Print "количество листов:" & CStr (wrk.Worksheets.Count) 'Восстановить исходное значение Application.SheetsInNewWorkbook = sheetCnt Конец подписки
Ключевое слово With и рабочая книга
Ключевое слово With упрощает чтение и запись кода VBA.Использование с означает, что вам нужно упомянуть элемент только один раз. с используется с объектами. Это такие элементы, как рабочие тетради, рабочие листы и диапазоны.
В следующем примере два Subs. Первый похож на код, который мы видели до сих пор. Второй использует ключевое слово с . Вы можете видеть, что код намного яснее во втором Sub. Ключевые слова End With обозначают окончание кода раздела с помощью With .
https://excelmacromastery.com/ 'Без ключевого слова With Общедоступная подпрограмма NoUsingWith () Debug.Print Workbooks ("Book2.xlsm"). Worksheets.Count Debug.Print Workbooks ("Book2.xlsm"). Имя Debug.Print Workbooks ("Book2.xlsm"). Worksheets (1) .Range ("A1") Рабочие тетради ("Book2.xlsm"). Закрыть Конец подписки 'Использование With упрощает чтение кода Публичная подписка UsingWith () С книгами ("Book2.xlsm") Отлаживать.Печать .Worksheets.Count Debug.Print .Name Debug.Print .Worksheets (1) .Range ("A1") .Закрыть Конец с Конец подписки
Сводка
Ниже приводится краткое изложение основных моментов этой публикации
- Чтобы получить книгу с кодом, используйте ThisWorkbook .
- Чтобы получить любую открытую книгу, используйте Рабочие книги («Example.xlsx») .
- Чтобы открыть книгу, используйте Set Wrk = Workbooks.Откройте («C: \ Folder \ Example.xlsx»).
- Разрешить пользователю выбирать файл с помощью функции UserSelectWorkbook , представленной выше.
- Чтобы создать копию открытой книги, используйте свойство SaveAs с именем файла.
- Чтобы создать копию книги без открытия, используйте функцию FileCopy .
- Чтобы упростить чтение и запись кода, используйте ключевое слово With .
- Другой способ сделать ваш код понятным - использовать переменные Workbook
- Для выполнения всех открытых рабочих книг используйте для каждой недели в рабочих книгах , где недель - это переменная книги.
- Старайтесь избегать использования ActiveWorkbook и Workbooks (Index) , поскольку их ссылка на книгу является временной.
Вы можете увидеть краткое руководство по теме в верхней части этого сообщения
Заключение
Это был подробный пост об очень важном элементе VBA - Рабочей книге. Надеюсь, вы сочли это полезным. Excel отлично предоставляет множество способов выполнять аналогичные действия, но недостатком является то, что иногда это может привести к путанице.
Чтобы извлечь максимальную пользу из этого поста, я рекомендую вам попробовать примеры. Создайте книги и поиграйте с кодом. Внесите изменения в код и посмотрите, как изменения повлияют на результат. Практика - лучший способ изучить VBA.
Если вы нашли этот пост полезным, не стесняйтесь поделиться им с другими, используя панель сбоку.
Что дальше?
Бесплатное руководство по VBA Если вы новичок в VBA или хотите отточить свои существующие навыки VBA, почему бы не попробовать The Ultimate VBA Tutorial.
Связанное обучение: Получите полный доступ к обучающим вебинарам по Excel VBA и всем учебным материалам.
( ПРИМЕЧАНИЕ: Планируете создание приложения VBA или управление им? Узнайте, как создать 10 приложений Excel VBA с нуля.)
Получите бесплатную электронную книгу
Не стесняйтесь подписаться на мой информационный бюллетень и получить эксклюзивный контент VBA, который вы не можете найти здесь, в блоге, а также бесплатный доступ к моей электронной книге How to Ace the 21 Most Common Question in VBA , которая полна примеров, которые вы можете использовать в своем собственном коде.
.
Workbook.Save-Method (Excel) | Документы Microsoft
- 2 минуты Леседауэра
В Diesem Artikel
Speichert Änderungen in der angegebenen Arbeitsmappe. Сохраняет изменения в указанной книге.
Синтаксис Синтаксис
Ausdruck . Speichern Sie выражение . Сохранить
Ausdruck Eine Variable, die ein Workbook -Objekt darstellt. выражение Переменная, представляющая объект Workbook .
Hinweise Замечания
Verwenden Sie die Open -Methode, um eine Arbeitsmappendatei zu öffnen. Чтобы открыть файл книги, используйте метод Open .
Um eine Arbeitsmappe als gespeichert zu markieren, ohne Sie auf einen Datenträger zu schreiben, legen Sie die Saved-Eigenschaft auf true fest.Чтобы пометить книгу как сохраненную без записи ее на диск, установите для свойства Saved значение True .
Wenn Sie eine Arbeitsmappe zum ersten Mal speichern, verwenden Sie die SaveAs -Methode, um einen Namen für die Datei anzugeben. При первом сохранении книги используйте метод SaveAs , чтобы указать имя файла.
Beispiel Пример
In diesem Beispiel wird die aktive Arbeitsmappe gespeichert. Этот пример сохраняет активную книгу.
ActiveWorkbook.Save
In diesem Beispiel werden alle geöffneten Arbeitsmappen gespeichert. Удален ответ Microsoft Excel. В этом примере сохраняются все открытые книги, а затем закрывается Microsoft Excel.
для каждого w в приложении.
w.Save
Следующая ж
Application.Quit
In diesem Beispiel wird das Ereignis BeforeSave verwendet, um sicherzustellen, dass in bestimmten Zellen Daten vorhanden sind, bevor eine Arbeitsmappe gespeichert werden kann.В этом примере используется событие BeforeSave для проверки того, что определенные ячейки содержат данные, прежде чем можно будет сохранить книгу. Dabei kann die Arbeitsmappe nur gespeichert werden, wenn in den folgenden Zellen Daten enthalten sind: D5, D7, D9, D11, D13 и D15. Рабочая книга не может быть сохранена, пока данные в каждой из следующих ячеек: D5, D7, D9 , D11, D13 и D15.
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Отменить как Boolean)
'Если шесть указанных ячеек не содержат данных, отобразить окно сообщения с ошибкой
'и отмените попытку сохранения.Если WorksheetFunction.CountA (Worksheets ("Sheet1"). Range ("D5, D7, D9, D11, D13, D15")) <6, то
MsgBox "Книга не будет сохранена, если" & vbCrLf & _
"Все обязательные поля заполнены!"
Отмена = True
Конец, если
Конец подписки
Поддержка и обратная связь Поддержка и отзывы
Haben Sie Fragen oder Feedback zu Office VBA or zu dieser Dokumentation? Есть вопросы или отзывы об Office VBA или этой документации? Unter Office VBA-Support и обратная связь Finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
.