Excel vba создать новую книгу: Создание книги | Microsoft Learn
Содержание
Защита проекта VBA в MS Excel / Хабр
Всем привет! Я обычный пользователь MS Excel. Не являющийся профессиональным программистом, но накопивший достаточно опыта, для установки и обхода защиты проектов VBA.
Дисклеймер:
В данной статье рассмотрены виды защиты проектов VBA, от несанкционированного доступа. Их сильные и слабые стороны – ранжирование.
Цель статьи показать слабые и сильные стороны каждого вида защиты проекта VBA в MS Office.
Демонстрация разработанных инструментов, в надстройке Macro Tools VBA, для снятия и установки той или иной защиты.
Все инструменты реализованы стандартными средствами VBA, без использования дополнительных библиотек.
Главная панель Надстройки Macro Tools VBA
Первый вид защиты — Обычный пароль
Время на снятие: мгновенно
Недостаток: быстрый доступ к запароленному модулю VBA
Стандартный инструмент (В среде VBE: панель Tools -> VBAProject Properties -> Protection).
Самая легко снимающаяся защита. В интернете легко находится код, для снятия данной защиты.
Данную защиту можно снять следующим инструментом:
Второй вид защиты — Project is Unviewable
Время на снятие: от 10 до 15 мин (в ручную)
Недостаток: доступ к исходному коду модуля VBA
Один из самых распространённых видов защит. Встречается в 95% файлах с защитой модуля VBA. При попытке открыть проект, открывается диалоговое окно, с сообщением: Project is Unviewable.
Большинство пользователей Excel, не могут снять данную защиту, так как она имеет множество вариации и нюансов, для ее снятие нужно иметь представление о внутренней структуре файла Excel.
Основан, данный вид защиты, на изменение ключей:
CMG=«4A488FCC54D054D054D054D0» DPB=«0B09CE0F8E108E108E» GC=«CCCE09520B120C120CED»
в файле vbaProject.bin
.
Кратко, как создается данная защита
Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку xl, открыть файл vbaProject.bin, в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово!
Это самый простой вариант данной защиты, но существует множество модификаций.
Алгоритм снятия защиты Project is Unviewable.
1) Разархивируем подопытный файл, переходим в файл …\xl\_rels\workbook.xml.rels
2) В файле workbook.xml.rels ищем строку, содержащую слово vbaProject, обычно имеет следующий вид: />. В этой строке нас интересует ключ Target,иего значение. Значение является название файла, в котором находится проект VBA. Иногда, защищающий меняет значения ключа на printerSettings.bin.Получается маскировка файла с проектом VBA под другой файл.
3) Открываем на редактирование файл, указанный в ключе Target, ищем в файле ключи CMG, DPB, GC. И меняем в их названиях любую букву на любую другую, например: CMC, DPC, CC. При поиске нужно быть аккуратным, так как защищающий может поместить в проект форму, подписью повторяющую один из ключей, например такую: DPB=«0B09CE0F8E108E108E». При ее изменении проект VBA, будет удален из книги Excel. Сохраняем и закрываем файл.
4) Переводим архив обратно в файл Excel.
5) Запускаем приложение Excel, выполняем следующее: в Центре управления безопасностью -> Параметры макросов -> Отключить все макросы без уведомления. Перезапускаем Excel. Данная операция нужна, для блокировки защиты, которую иногда ставят авторы макросов. Данная защита реализована следующим образом. В модуле VBA «ЭтаКнига», создается процедуры, реагирующие на события открытия книги или закрытия книги. Эти события обычно проверяют, наличие пароля на проект VBA, запрет сохранения и прочее.
6) Открываем файл. Если все правильно сделано то, Excel, будет ругаться на не правильные ключи, которые мы отредактировали, в пункте 3. Жмем, да, пока данные сообщения не закончатся и диалоговое окно закроется.
Если данное сообщение не появляется то, вы отредактировали не файл который содержит проект VBA.
7) Открываем проект VBA. После всего, проект VBA должен быть доступен.
8) Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 1 по 7. Обычно так происходит когда в файле workbook.xml.rels в ключе Target установлено printerSettings.bin.При сохранение, Excel исправляет это на значение на vbaProject.bin
Данную защиту можно установить и снять следующим инструментом:
Третий вид защиты — Hidden Module, скрытые модули VBA
Время на снятие: от 15 до 20 мин (нужен редактор OLE — объектов, Structured Storage Viewer, например.
Недостаток: доступ к коду модуля VBA
Менее распространенный вид защиты обычно встречается в комбинации с защитой Project is Unviewable. При установке данной защиты модуль VBA не отображается в проекте книги Excel. О его существовании можно узнать, проанализировав код VBA (что требует время!) или открыть файл Excel в программе OpenOffice или LibreOffice (так же можно смотреть код при защите Project is Unviewable, но данный способ не дает возможность получить рабочий файл, без пароля).
Просмотр кода VBA в LibreOffice
Кратко, как создается данная защита
Для создания данной защиты нужно отредактировать файл с проектом VBA — vbaProject.bin или printerSettings.bin,в зависимости от настроек в файле …\xl\_rels\workbook.xml.rels. В конце файла удаляются строки вида: Module1=32, 32, 635, 330, Z. С нужными названиями модулей.
Для снятия данной защиты нужно в файле vbaProject.bin — восстановить удаленные записи модулей.
Данную защиту можно установить следующим инструментом.
Четвертый вид защиты — Обфускация кода
Время на снятие: неизвестно, зависит от объема кода и пере использования частей кода
Обфусцированный код VBA
Недостаток: необходимость тестирование файла после обфускации, на работоспособность
Крайне редкий вид защиты, основанный на изменении исходного кода VBA, в не удобочитаемый вид для человека. Удаляются все комментарии, форматирование кода, переименовываются названия всех переменных, процедур, функций, модулей и прочего. Злоумышленнику никогда не удастся восстановить первоначальный вид кода, и потребует достаточно много времени для, его восстановления в удобно читаемый вид для человека.
Для де-обфускации кода нужно иметь время, специализированное ПО.
Данную защиту можно установить следующим инструментом.
Пятый вид защиты — Перенос кода в dll
Время на снятие: неизвестно, зависит от языка программирования и квалификации
Недостаток: необходимости в дополнительном файле dll
Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине, необходимости за файлом Excel, «таскать» дополнительный файл, dll.
Для получения доступа к коду dll, нужно обладать специальными знаниями.
Заключение
В заключении хочу выделить бесполезность защит: Project is Unviewable и Hidden Module которые, по существу ни отчего не защищают. Позволяют просматривать код VBA, без изменения исходного файла, в таких программах как OpenOffice или LibreOffice. Так и снимаются без особых проблем.
Как сделать активной книгу excel vba?
Содержание
- 1 Открытие существующей книги
- 2 Создание новой книги
- 3 Обращение к открытой книге
- 4 Как закрыть книгу Excel из кода VBA
- 4.1 Сохранение всех рабочих книг
- 4.2 Сохранение и закрытие всех рабочих книг
- 4. 3 Частичное сокрытие элементов рабочего листа
- 4.4 Синхронизация выделенного диапазона на листах рабочей книги
- 4.5 Решение(ия):
- 5 Создать новую книгу в Excel VBA — примеры:
- 5.0.0.1 Создать новую книгу
- 5.0.0.2 Создание объекта для вновь созданной книги
Открытие книги Excel из кода VBA. Создание новой книги, присвоение ей имени. Обращение к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.
- Открытие существующей книги
- Создание новой книги
- Обращение к открытой книге
- Как закрыть книгу Excel из кода VBA
Открытие существующей книги
Существующая книга открывается из кода 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
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:test2.xls"
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2. xls».
Обращение к открытой книге
Обращение к активной книге:
ActiveWorkbook
Обращение к книге с выполняемым кодом:
ThisWorkbook
Обращение к книге по имени:
Workbooks("test1.xls") Workbooks("test2.xls")
Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.
Как закрыть книгу Excel из кода VBA
Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:
Workbooks("test1.xlsx").Close
Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1. xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:
Workbooks("test1.xlsx").Close SaveChanges:=False
или
Workbooks("test1.xlsx").Close (False)
Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:
Workbooks("test1.xlsx").Close SaveChanges:=True
или
Workbooks("test1.xlsx").Close (True)
Настоящая заметка продолжает знакомство с VBA, в ней приводятся примеры управления рабочими книгами и листами Excel с помощью VBA.
Рис. 1. Столбцы и строки скрыты за исключением рабочего диапазона
Скачать заметку в формате Word или pdf, примеры в архиве (политика безопасности провайдера не позволяет загружать файлы Excel с поддержкой макросов)
Сохранение всех рабочих книг
Следующая процедура циклически просматривает все рабочие книги в коллекции Workbooks и сохраняет каждый файл, который сохранялся ранее.
Public Sub SaveAllWorkbooks()
Dim Book As Workbook
For Each Book In Workbooks
If Book.Path "
"
Then Book.Save
Next Book
End Sub
Обратите внимание на то, как используется свойство Path. Если для какой-либо рабочей книги свойство Path не задано, значит, файл еще не сохранялся (это новая рабочая книга). Данная процедура игнорирует такие рабочие книги и сохраняет только те из них, свойство Path которых имеет ненулевое значение.
Сохранение и закрытие всех рабочих книг
Следующая процедура циклически просматривает коллекцию Workbooks. Программа сохраняет и закрывает все рабочие книги.
Sub CloseAllWorkbooks()
Dim Book As Workbook
For Each Book In Workbooks
If Book.Name ThisWorkbook.Name Then
Book.Close savechanges:=True
End If
Next Book
ThisWorkbook.Close savechanges:=True
End Sub
Обратите внимание, что процедура использует оператор If, чтобы определить, содержит ли данная рабочая книга текущий выполняемый код. Это необходимо, так как при закрытии рабочей книги, содержащей процедуру, программа автоматически завершает свое выполнение, причем остальные рабочие книги не будут сохранены и закрыты.
Частичное сокрытие элементов рабочего листа
В примере из этого раздела скрываются все строки и столбцы рабочего листа за исключением тех из них, которые находятся в текущем выделенном диапазоне (рис. 1).
Sub HideRowsAndColumns()
Dim row1 As Long, row2 As Long
Dim col1 As Long, col2 As Long
If TypeName(Selection) "
Range"
Then Exit Sub'
Если последняя строка либо последний столбец скрыты,'
отобразить все и выйти
If Rows(Rows.Count).EntireRow.Hidden Or _
Columns(Columns.Count).EntireColumn.Hidden Then
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Exit Sub
End If
row1 = Selection.Rows(1).Row
row2 = row1 + Selection. Rows.Count — 1
col1 = Selection.Columns(1).Column
col2 = col1 + Selection.Columns.Count — 1
Application.ScreenUpdating = False
On Error Resume Next'
Скрыть строки
Range(Cells(1, 1), Cells(row1 — 1, 1)).EntireRow.Hidden = True
Range(Cells(row2 + 1, 1), Cells(Rows.Count, _
1)).EntireRow.Hidden = True'
Скрыть столбцы
Range(Cells(1, 1), Cells(1, col1 — 1)).EntireColumn.Hidden = True
Range(Cells(1, col2 + 1), Cells(1, _
Columns.Count)).EntireColumn.Hidden = True
End Sub
Чтобы показать все строки и столбцы, встаньте на перекрестие строк и столбцов (выделено красным на рис. 1), и пройдите по меню: Главная –> Ячейки –> Формат –> Скрыть или отобразить –> Отобразить строки. Повторите этот путь, чтобы отобразить столбцы (рис. 2).
Рис. 2. Показать все строки и столбцы
Если выделенный диапазон включает несвязанные диапазоны, видимым останется только первый из них.
Синхронизация выделенного диапазона на листах рабочей книги
Если вы работаете с рабочими книгами, состоящими из нескольких листов, то, вероятно, знаете, что Excel не может «синхронизировать» листы в рабочей книге. Другими словами, не существует автоматического способа сделать так, чтобы все листы имели одинаковые выделенные диапазоны и верхние левые ячейки. Макрос VBA, показанный ниже, берет за основу активный рабочий лист и выполняет следующие действия со всеми остальными рабочими листами в книге:
- выделяет тот же диапазон, что и в активном листе;
- задает ту же левую верхнюю ячейку, что и на активном листе (рис. 3).
Рис. 3. Синхронизация выделенного диапазона на листах рабочей книги
Sub SynchSheets()'
Дублирование выделенного диапазона активного листа'
и верхней левой ячейки активного диапазона на всех листах
If TypeName(ActiveSheet) "
Worksheet"
Then Exit Sub
Dim UserSheet As Worksheet, sht As Worksheet
Dim TopRow As Long, LeftCol As Integer
Dim UserSel As String
Application. ScreenUpdating = False'
Запоминание текущего листа
Set UserSheet = ActiveSheet'
Сохранение сведений об активной ячейке
TopRow = ActiveWindow.ScrollRow
LeftCol = ActiveWindow.ScrollColumn
UserSel = ActiveWindow.RangeSelection.Address'
Циклический обход рабочих листов
For Each sht In ActiveWorkbook.Worksheets
If sht.Visible Then '
пропуск скрытых листов
sht.Activate
Range(UserSel).Select
ActiveWindow.ScrollRow = TopRow
ActiveWindow.ScrollColumn = LeftCol
End If
Next sht'
Восстановление исходного положения
UserSheet.Activate
Application.ScreenUpdating = True
End Sub
По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 348–351.
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные. xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1"). Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection. PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
Иногда мы можем захотеть открыть или создать новую книгу с помощью VBA. Вы можете установить новую созданную книгу на объект, чтобы было легко сослаться на вашу книгу для выполнения дальнейших задач.
Решение(ия):
Следующие макросы позволят открыть или создать новую книгу с помощью метода Добавить.
Создать новую книгу в Excel VBA — примеры:
- Создать новую книгу
- Создание объекта для вновь созданной рабочей книги
Создать новую книгу
Вы можете использовать следующий код для создания новой книги и сохранения на диске C с помощью метода «Добавить».
Код:
Sub AddNewWorkbook1() 'Добавление новой рабочей книги Workbooks.Add 'Сохранение рабочей книги ActiveWorkbook.SaveAs "C:WorkbookName.xls" 'OR ActiveWorkbook.SaveAs Filename:="C:WorkbookName1.xls" End Sub
Объяснение:
- Метод добавления рабочей книги добавит новую книгу
- Сохранить как рабочую книгу метод сохранит активную книгу в определенном месте с указанным именем файла
Вывод: Вы должны увидеть недавно открытую книгу вместе с существующей книгой.
Инструкции:
- Откройте рабочую книгу Excel
- Нажмите Alt + F11, чтобы открыть редактор VBA.
- Вставьте новый модуль из меню «Вставка»
- Создайте приведенный выше код и вставьте в окно кода
- Нажмите F5, чтобы увидеть выход
- Вы должны увидеть недавно открытую книгу, как показано выше.
- Сохраните файл в виде макросъемки
Создание объекта для вновь созданной книги
Вы можете установить вновь созданную книгу на объект, так что вам легко обратиться к вашей книге для выполнения дальнейших задач.
Код:
sub AddNewWorkbook2() Dim wkb as Workbook 'Добавление новой рабочей книги Set wkb = Workbooks.Add 'Сохранение рабочей книги wkb.SaveAs "C:WorkbookName.xls" 'OR wkb.SaveAs Filename:="C:WorkbookName1.xls" End Sub
Вывод:
Вы должны увидеть недавно открытую книгу вместе с существующей книгой.
Инструкции:
- Откройте рабочую книгу Excel
- Нажмите Alt + F11, чтобы открыть редактор VBA.
- Вставьте новый модуль из меню «Вставка»
- Создайте приведенный выше код и вставьте в окно кода
- Нажмите F5, чтобы увидеть выход
- Вы должны увидеть недавно открытую книгу, как показано выше.
- Сохраните файл в виде макросъемки
Создание и сохранение новой книги в VBA Excel Tutorial
Опубликовано Харун Спахич
Visual Basic для приложений (VBA) позволяет нам автоматизировать каждый аспект нашей работы в Excel. Это может относиться к любому уровню, на котором мы находимся, говорим ли мы о приложении в целом, определенной рабочей книге или конкретном листе.
В приведенном ниже примере мы покажем, как мы можем манипулировать Excel на уровне приложения с помощью VBA до создать и сохранить новую книгу с помощью VBA .
Создать новую книгу в Vba
Чтобы получить доступ к модулю VBA, мы нажмем комбинацию ALT + F11 на нашей клавиатуре. В появившемся окне мы щелкнем правой кнопкой мыши с левой стороны и выберем Вставить >> Модуль :
С правой стороны модуля мы вставим следующий код:
Sub Add_A_Workbook()
Dim wb как рабочая книга
Установите wb = Workbooks.Добавить
Конец суб
Sub Add_A_Workbook() Dim wb As Workbook Set wb = Workbooks.Add End Sub |
Что делает этот код, когда мы его запускаем, так это то, что он автоматически добавляет другую книгу, открывает ее, а затем автоматически размещает нас в этой новой книге.
Сохранить новую книгу в Vba
Нам нужно добавить еще одну строку в наш код, чтобы сохранить новую книгу. Это будет строка:
ActiveWorkbook.SaveAs Имя файла:=»C:\Users\Harun\Desktop\Mybook.xlsx»
ActiveWorkbook.SaveAs Имя файла:=»C:\Users\Harun\Desktop\Mybook.xlsx» |
Поскольку вновь созданная рабочая книга будет автоматически активной, мы просто сохраним ее, но также определим имя файла (Моя книга), Местоположение (Рабочий стол) и тип файла (xlsx) . Вот как выглядит наш код в модуле:
Когда мы запускаем код , нажимая F5 в модуле, новая книга будет автоматически добавлена и сохранена на рабочем столе с именем «Моя книга» :
Выберите папку для сохранения новой книги
Там — это дополнительный способ сохранить новую книгу, т. е. позволить нам выбрать папку назначения. Это будет код для этой цели:
Sub Choose_A_Folder_For_New_Workbook()
Dim wb как рабочая книга
Установите wb = Workbooks. Добавить
Dim ws как строка
ws = Application.GetSaveAsFilename(InitialFileName:=»Default», _
filefilter:=»Файлы Excel (*.xlsx),*.xlsx,файлы макросов Excel (*.xlsm),*.xlsm»)
wb.SaveAs ws
Конец суб
1 2 3 4 5 6 7 8 | Sub Choose_A_Folder_For_New_Workbook() Dim wb As Workbook Set wb = Workbooks.Add Dim ws As String ws = Application.GetSaveAsFilename(InitialFileName:=»Default», _ filefilter:=»Excel Files (*.xlsx),*.xlsx,файлы макросов Excel (*.xlsm),*.xlsm») wb.SaveAs ws End Sub |
Этот код объявляет дополнительную переменную с именем ws в виде строки , а затем вызывает параметр GetSaveAsFilename , который имеет несколько параметров. Для нашего примера мы решили использовать параметры InitialFileName и filefilter , в которых мы объявили начальное имя и возможные типы, в которых файл может быть сохранен.
Когда мы выполним код, это окно, которое мы увидим:
Заметно, что теперь нам предлагается папка Office по умолчанию при сохранении файлов (документов) и что мы можем сохранить наш файл как файл .xlsx (книга Excel) или .xlsm (с поддержкой макросов) . Имя нашего файла равно «По умолчанию», которое мы также определили в коде. Мы можем изменить его по своему вкусу.
Просмотров сообщения: 92
Опубликовано в vba
© 2023 OfficeTuts. Все права защищены.
excel — попытка создать новую книгу (в формате .xlsm) с использованием кода VBA
Я пытаюсь создать несколько книг, используя шаблон существующей книги. Существующая книга сохраняется как .xlsm. Когда я пытаюсь создать новые книги, это дает мне ошибку.
Но после запуска кода у меня появляется всплывающее сообщение с вопросом, хочу ли я «продолжить сохранение в виде книги без макросов»
Если я нажму «Нет», у меня появится сообщение об ошибке:
Ошибка: ошибка времени выполнения «1004». Проекты VB и листы XLM нельзя сохранять в рабочей книге без макросов.
Если я нажму «Да», у меня появится сообщение об ошибке:
Ошибка: это расширение нельзя использовать с выбранным типом файла.
Я знаю, что это потому, что я дал расширение как .xlsm для новых книг, и мне нужно будет изменить его на .xlsx, если я хочу, чтобы он был сохранен как книга без макросов.
Подпрограмма vba_create_workbook() Workbooks.Add Template:="Путь к папке\Имя файла.xlsm" ActiveWorkbook.SaveAs "Путь к папке\Имя файла.xlsm" Workbooks.Add Template:="Путь к папке\Имя файла.xlsm" ActiveWorkbook.SaveAs "Путь к папке\Имя файла.xlsm" Конец сабвуфера
Можно ли каким-либо образом сохранить созданные новые файлы напрямую как книги с поддержкой макросов, т. е. (.xlsm)?
- Excel
- ВБА
Создать новую книгу из шаблона
Использование
Sub RefNewTemplateTEST() Const SRC_FILE_PATH As String = "Путь к папке\Имя исходного файла. xlsm" Const DST_FILE_PATH As String = "Путь к папке\Имя файла назначения.xlsm" Dim dwb As Workbook: установите dwb = RefNewTemplate (SRC_FILE_PATH, DST_FILE_PATH) Если dwb ничего не значит, выйдите из Sub ' Продолжайте использовать dwb. MsgBox "Создано '" & dwb.Name & "' из шаблона.", vbInformation Конец сабвуфера
Функция
Функция RefNewTemplate( _
Путь к шаблону как строка, _
Путь назначения как строка) _
Как рабочая тетрадь
Const PROC_TITLE As String = "Ссылка на новую книгу из шаблона"Если StrComp(TemplatePath, DestinationPath, vbTextCompare) = 0 Тогда
MsgBox "Пути шаблона и назначения совпадают.", _
vbCritical, PROC_TITLE
Выход из функции
Конец, еслиDim dwb As Workbook, ErrNum As Long
Dim ErrDescription как строка, MsgString как строкаПри ошибке Возобновить Далее
Установите dwb = Workbooks.Add (Шаблон: = Путь к шаблону)
ErrNum = Err. Number
ErrDescription = Err.Description
При ошибке Перейти к 0Если ErrNum <> 0 Тогда
Выберите Case ErrDescription
Случай «Сбой метода «Добавить» объекта «Рабочие книги»
MsgString = "Шаблон уже открыт."
Дело "К сожалению, Excel не может открыть две книги с помощью " _
& "одно и то же имя в то же время".
MsgString = "Файл с тем же именем, что и у шаблона, открыт."
Дело еще
Конец выбора
MsgBox "Ошибка выполнения '" & ErrNum & "':" & vbLf & vbLf _
& ErrDescription & IIf(Len(MsgString) > 0, vbLf & vbLf, "") _
& MsgString, vbCritical, PROC_TITLE
Выход из функции
Конец, еслиApplication.DisplayAlerts = False ' перезапись без подтверждения
При ошибке Возобновить Далее
dwb.SaveAs DestinationPath, xlOpenXMLWorkbookMacroEnabled
ErrNum = Err.Number
ErrDescription = Err.Description
При ошибке Перейти к 0
Application.