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.

  1. Открытие существующей книги
  2. Создание новой книги
  3. Обращение к открытой книге
  4. Как закрыть книгу 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  

Объяснение:

  1. Метод добавления рабочей книги  добавит новую книгу
  2. Сохранить как рабочую книгу метод сохранит активную книгу в определенном месте с указанным именем файла

Вывод: Вы должны увидеть недавно открытую книгу вместе с существующей книгой.

Инструкции:

  1. Откройте рабочую книгу Excel
  2. Нажмите Alt + F11, чтобы открыть редактор VBA.
  3. Вставьте новый модуль из меню «Вставка»
  4. Создайте приведенный выше код и вставьте в окно кода
  5. Нажмите F5, чтобы увидеть выход
  6. Вы должны увидеть недавно открытую книгу, как показано выше.
  7. Сохраните файл в виде макросъемки
    Создание объекта для вновь созданной книги

      Вы можете установить вновь созданную книгу на объект, так что вам легко обратиться к вашей книге для выполнения дальнейших задач.

    Код:

    sub AddNewWorkbook2()  Dim wkb as Workbook  'Добавление новой рабочей книги  Set wkb = Workbooks.Add  'Сохранение рабочей книги  wkb.SaveAs "C:WorkbookName.xls"  'OR  wkb.SaveAs Filename:="C:WorkbookName1.xls"  End Sub  

    Вывод:

      Вы должны увидеть недавно открытую книгу вместе с существующей книгой.

    Инструкции:

    1. Откройте рабочую книгу Excel
    2. Нажмите Alt + F11, чтобы открыть редактор VBA.
    3. Вставьте новый модуль из меню «Вставка»
    4. Создайте приведенный выше код и вставьте в окно кода
    5. Нажмите F5, чтобы увидеть выход
    6. Вы должны увидеть недавно открытую книгу, как показано выше.
    7. Сохраните файл в виде макросъемки

      Создание и сохранение новой книги в 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
      • ВБА
      2

      Создать новую книгу из шаблона

      Использование

       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.