VBA Excel. Создание файлов

Создание файлов Excel методами Workbooks.Add, Worksheet.Copy и текстовых файлов с помощью оператора Open и метода CreateTextFile из кода VBA Excel. Создание документов Word рассмотрено в отдельной статье.

Создание файлов Excel

Метод Workbooks.Add

Описание

Файлы Excel можно создавать из кода VBA с помощью метода Add объекта Workbooks.

Workbooks.Add – это метод, который создает и возвращает новую книгу Excel. Новая книга после создания становится активной.

Ссылку на новую книгу Excel, созданную методом Workbooks.Add, можно присвоить объектной переменной с помощью оператора Set или обращаться к ней, как к активной книге: ActiveWorkbook.

Синтаксис

Workbooks.Add (Template)

Template – параметр, который определяет, как создается новая книга.

Значение Template Параметры новой книги
Отсутствует Новая книга с количеством листов по умолчанию.
Полное имя существующего файла Excel Новая книга с указанным файлом в качестве шаблона.
xlWBATChart Новый файл с одним листом диаграммы.
xlWBATWorksheet Новый файл с одним рабочим листом.

Примеры

Пример 1
Создание новой книги Excel с количеством листов по умолчанию и сохранение ее в папку, где расположен файл с кодом VBA:

Файл «Моя новая книга.xlsx» понадобится для следующего примера.

Пример 2
Создание новой книги по файлу «Моя новая книга.xlsx» в качестве шаблона с присвоением ссылки на нее объектной переменной, сохранение нового файла с новым именем и добавление в него нового рабочего листа:

Метод Worksheet.Copy

Описание

Если в коде VBA Excel применить метод Worksheet.Copy без указания параметра Before или After, будет создана новая книга с копируемым листом (листами). Новая книга станет активной.

Примеры

Пример 3
Создание новой книги с помощью копирования одного листа (в этом примере используется книга, созданная в первом примере):

Также, как и при создании нового файла Excel методом Workbooks.Add, при создании новой книги методом Worksheet.Copy, можно ссылку на нее присвоить объектной переменной.

Пример 4
Создание новой книги, в которую включены копии всех рабочих листов из файла с кодом VBA:

Пример 5
Создание новой книги, в которую включены копии выбранных рабочих листов из файла с кодом VBA:

Создание текстовых файлов

Оператор Open

При попытке открыть несуществующий текстовый файл с помощью оператора Open, такой файл будет создан. Новый файл будет создан при открытии его в любом режиме последовательного доступа, кроме Input (только для чтения).

Пример

В имени текстового файла пробелы заменены дефисами (знаками минус), так как метод Run объекта Wscript.Shell не способен открывать файлы с именами, содержащими пробелы.

Метод FileSystemObject.CreateTextFile

Для создания нового текстового файла из кода VBA Excel по указанному имени, можно использовать метод CreateTextFile объекта FileSystemObject.

Пример

Стоит отметить, что новый текстовый файл может быть создан и с помощью метода OpenTextFile объекта FileSystemObject при условии присвоения параметру create значения True.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

12 комментариев для “VBA Excel. Создание файлов”

  1. А как сделать, чтобы имя файла бралось из текстбокса, и вообще, чтобы имя файла было динамическим, чтобы можно было дату, счетчик ставить?

    1. Евгений

      Привет, Роберт!
      Полное имя файла или его часть можно заменить переменной или текстовым содержимым элемента управления формы:

      1. Спасибо! Работает, но только теперь сохраняет не в указанную папку, а в «Документы», и название рабочей папки вставляет в имя файла. К примеру, если у меня рабочий файл находится в папке «Проекты», то при сохранении появляется файл с именем «ПроектыИмя_проекта.xlsx»

        1. Роберт, перед именем файла нужна обратная косая черта (\), как в примере со счетчиком. Я добавил ее в первый пример, чтобы в текстовом поле можно было ее не указывать.

      2. Доброго времени суток! Сохраняю файл следующей командой

        сохраняет книгу с наименованием содержащим расширение .xlsm (1_ПРОБА МАКРОСОВ.xlsm.xlsx) не очень красиво.
        Подскажите как подавить данное расширение в имени.
        И если не трудно, поясните как сохранить файл с именем из двух ячеек книги? С подавлением неприемлемых символов («, / и т.д.)?

        1. Евгений

          Привет, Павел!
          Выражение ThisWorkbook.Name возвращает имя книги с расширением, в вашем случае: 1_ПРОБА МАКРОСОВ.xlsm. Поэтому, если вы хотите сохранить ActiveWorkbook с расширением .xlsx, просто замените расширение:

          но имейте в виду, что ActiveWorkbook — это не ThisWorkbook, а другая книга без макросов, так как книгу с макросами невозможно сохранить с расширением .xlsx.

          Перед использованием ячеек, избавьтесь от неприемлемых символов с помощью функции Replace, заменив их на пустые строки. Код с ячейками может выглядеть так:

      3. ws.Run ThisWorkbook.Path & "\Мой-новый-файл.txt"
        даёт ошибку если Excel файл находится в папке а не на рабочем столе.

        1. Евгений

          Привет, Самвел!
          Если вы используете в адресе ThisWorkbook.Path, файл Excel и текстовый файл должны находиться в одной папке. (Ответ не соответствует ситуации, так как текстовый файл создается кодом VBA в той же папке, где находится файл Excel.)

      4. Добрый вечер, Евгений!
        Я скопировал Ваш код в excel файл на рабочем столе. всё работает.
        Затем поместил файл в папку и происходит ошибка при попытке просмотра txt файла:
        Здесь ws.Run ThisWorkbook.Path & «\Мой-новый-файл.txt»
        Ниже показан код.
        Спасибо.

      5. Похоже если название папки состоит их 2х слов с пробелом, то возникает ошибка.
        А как возможно открыть для просмотра txt создавая его в папку с произвольным названием?

        1. Евгений

          Если в адресе есть пробелы, нужны дополнительные кавычки:

Добавить комментарий

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