Создать файл vba excel: VBA Excel. Создание файлов

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

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

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

1.1.
Метод Workbooks.Add

1.1.1.
Описание

1.1.2.
Синтаксис

1.1.3.
Примеры

1.2.
Метод Worksheet.Copy

1.2.1.
Описание

1.2.2.
Примеры

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

2. 1.
Оператор Open

2.1.1.
Пример

2.2.
Метод FileSystemObject.CreateTextFile

2.2.1.
Пример

Создание файлов 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:

1

2

3

4

5

6

7

8

Sub Primer1()

‘Создаем новую книгу

Workbooks.Add

‘Сохраняем книгу в папку, где расположен файл с кодом

ActiveWorkbook.SaveAs (ThisWorkbook.Path & «\Моя новая книга.xlsx»)

‘Закрываем файл

ActiveWorkbook.Close

End Sub

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Sub Primer2()

‘Объявляем объектную переменную с ранней привязкой

Dim MyWorkbook As Workbook

‘Создаем новую книгу по шаблону файла «Моя новая книга.xlsx»

Set MyWorkbook = Workbooks.Add(ThisWorkbook.Path & «\Моя новая книга.xlsx»)

    With MyWorkbook

        ‘Смотрим какое имя присвоено новому файлу по умолчанию

        MsgBox .Name ‘»Моя новая книга1″

        ‘Сохраняем книгу с новым именем

        .SaveAs (ThisWorkbook.Path & «\Моя самая новая книга.xlsx»)

        ‘Смотрим новое имя файла

        MsgBox .Name ‘»Моя самая новая книга»

        ‘Добавляем в книгу новый лист с именем «Мой новый лист»

        . Sheets.Add.Name = «Мой новый лист»

        ‘Сохраняем файл

        .Save

    End With

End Sub

Метод Worksheet.Copy

Описание

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

Примеры

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

1

2

3

4

5

6

7

8

9

Sub Primer3()

‘Если книга источник не открыта, ее нужно открыть

Workbooks.Open (ThisWorkbook.Path & «\Моя новая книга.xlsx»)

‘Создаем новую книгу копированием одного листа

Workbooks(«Моя новая книга.xlsx»).Worksheets(«Лист1»).Copy

‘Сохраняем новую книгу с именем «Еще одна книжица. xlsx» в папку,

‘где расположен файл с кодом

ActiveWorkbook.SaveAs (ThisWorkbook.Path & «\Еще одна книжица.xlsx»)

End Sub

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

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

Sub Primer4()

ThisWorkbook.Worksheets.Copy

End Sub

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

Sub Primer5()

ThisWorkbook.Sheets(Array(«Лист1», «Лист3», «Лист7»)).Copy

End Sub

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

Оператор Open

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

Пример

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub Primer6()

Dim ff As Integer, ws As Object

‘Получаем свободный номер для открываемого файла

ff = FreeFile

‘Создаем новый текстовый файл путем открытия

‘несуществующего в режиме чтения и записи

Open ThisWorkbook.Path & «\Мой-новый-файл.txt» For Output As ff

‘Записываем в файл текст

Write #ff, «Этот файл создан при его открытии оператором » & _

«Open по несуществующему адресу (полному имени).»

‘Закрываем файл

Close ff

‘Открываем файл для просмотра

Set ws = CreateObject(«WScript.Shell»)

ws.Run ThisWorkbook.Path & «\Мой-новый-файл.txt»

Set ws = Nothing

End Sub

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

Метод FileSystemObject.CreateTextFile

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

Пример

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Sub Primer7()

Dim fso, fl, ws

‘Создаем новый экземпляр объекта FileSystemObject

Set fso = CreateObject(«Scripting.FileSystemObject»)

‘Присваиваем переменной fl новый объект TextStream,

‘связанный с созданным и открытым для записи файлом

Set fl = fso.CreateTextFile(ThisWorkbook.Path & «\Еще-один-текстовый-файл.txt»)

‘Записываем в файл текст

fl.Write («Этот текстовый файл создан методом CreateTextFile объекта FileSystemObject.»)

‘Закрываем файл

fl.Close

‘Открываем файл для просмотра

Set ws = CreateObject(«WScript. Shell»)

ws.Run ThisWorkbook.Path & «\Еще-один-текстовый-файл.txt»

End Sub

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

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

Как создать новый Excel файл для каждого листа использую макрос

Главная » Макросы (VBA)

Автор Дмитрий Якушев На чтение 2 мин. Просмотров 1.7k.

Что делает макрос: Данный макрос поможет создать новый файл для каждого листа существующей книги.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Важно
  4. Как работает этот код
  5. Как использовать

Как макрос работает

В этом макросе помечаются рабочие листы, копируется каждый лист, а затем отправляет копию в новую книгу. Надо отметить здесь, что вновь созданные книги сохраняются в том же каталоге, что и исходные, с именем, скопированного листа (wb.SaveAs ThisWorkbook.Path & «\» & ws.Name).

Код макроса

Sub SozdatNoviiFailDlyaKajdogoLista()
'Шаг 1: Объявляем переменные
Dim ws As Worksheet
Dim wb As Workbook
'Шаг 2: Запускаем цикл через листы
For Each ws In ThisWorkbook.Worksheets
'Шаг 3: Создаем новую рабочую книгу и сохраняем ее.
Set wb = Workbooks.Add
wb.SaveAs ThisWorkbook.Path & "\" & ws.Name
'Шаг 4: Копируем целевой лист в новую книгу
ws.Copy Before:=wb.Worksheets(1)
wb.Close SaveChanges:=True
'Шаг 5: Возвращаемся в п.2.
Next ws
End Sub

Важно

Не всегда возможно заменить новые книги определенными именами файлов. Windows имеет конкретные правила, которые мешают именовать файлы с определенными символами. Нельзя использовать эти символы при вводе имени файла: обратная косая черта (\), косая черта (/), двоеточие (:), звездочка (*), знак вопроса (?), трубы (|), кавычки («), больше ( > ) и меньше (<). Используя данный макрос, назвав вновь созданный файл в соответствии с именем листа может привести к ошибке. Например, макрос выдает ошибку при создании нового файла из листа под названием Май| Выручка (из-за знака «|» ).
Нельзя именовать файлы с запрещенными знаками.

Как работает этот код

  1. Шаг 1 объявляет две переменные объекта. Переменная WS создает контейнер памяти для каждого листа макросов с помощью цикла. Переменная создает контейнер для новых рабочих книг.
  2. На шаге 2 макрос начинает цикл через листы. Использование объекта ThisWorkbook гарантирует, что активный лист копирует код книги, которая создается.
  3. На шаге 3, мы создаем новую книгу и сохраняем её в том же месте, что и исходную (файл thisworkbook). Имя файла будет такое же имя, что и имя листа.
  4. Шаг 4 копия активного листа использует параметр, прежде чем отправить его к новой книге, как первую вкладку.
  5. Шаг 5 повторяем шаг 2 для следующего листа. После того как все листы будут скопированы макрос завершает работу.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.

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

Главная / VBA / VBA Создание и запись в текстовый файл

Создание текстового файла с помощью VBA

Синтаксис метода CreateTextFile

Запись в текстовый файл с помощью VBA

В создать текст с помощью кода VBA, вам нужно использовать метод CreateTextFile. Этот метод позволяет вам определить место, где вы хотите его создать. Этот метод имеет синтаксис, в котором вы можете указать, хотите ли вы перезаписать файл в местоположении, и указать, создается ли файл как файл Unicode или ASCII.

Создайте текстовый файл с помощью VBA

Выполните следующие действия:

  1. Во-первых, вам нужно использовать объект FileSystemObject или Folder для использования с методом.
  2. После этого необходимо создать еще один объект с помощью метода CreateTextFile.
  3. В этом коде мы использовали TRUE для перезаписи, если в папке уже есть файл с таким именем.
  4. В конце, когда вы запустите этот макрос, создайте новый текстовый файл в папке, как показано ниже.
 Sub create_text_file()
'объект для использования в качестве папки
Dim fld как объект
Установите fld = CreateObject("Scripting.FileSystemObject")
'используя метод создания текстового файла
Затемнить мой файл как объект
Установите myFile = fld.CreateTextFile("C:\Users\Dell\Desktop\myFolder\myTextFile.txt", True)
 
End Sub 

Синтаксис для метода CreateTextFile

 CreateTextFile (имя файла, [ перезаписать, [ unicode ]]) 
  • имя файла: Путь и имя файла, который вы хотите создать.
  • перезапись: Логическое значение для определения, хотите ли вы перезаписать файл (если он уже существует) (необязательно).
  • unicode: Логическое значение, чтобы определить, будет ли файл создан как файл Unicode или ASCII (необязательно).

Запись в текстовый файл с помощью VBA

Для записи данных в текстовый файл можно использовать два оператора:

  1. Запись: С помощью этого оператора вы можете записывать данные в текстовый файл, где вы будете иметь запятые между значениями, кавычки вокруг строк и знаки # вокруг дат.
  2. Печать: С помощью этого оператора вы можете записывать данные в текстовый файл с тем же видом, что и на листе Excel.

Теперь мы рассмотрим примеры для обоих операторов и поймем, как написать полный код для записи в текстовый файл. Но перед этим вам нужно понять некоторые термины , чтобы писать код так, как вы хотите.

  • Для вывода: Вы можете использовать эту команду, когда хотите записать данные или изменить данные в текстовом файле.
  • Для ввода: С помощью этой команды вы можете извлечь данные из текста, но вы не сможете изменять и добавлять данные в файл.
  • Для добавления: Эта команда поможет вам добавить новые данные в конец текстового файла.
  • FreeFile: Вы можете использовать его, чтобы определить номер файла, который не используется, для текстового файла, который вы хотите использовать, чтобы вы могли ссылаться на него.

Теперь давайте напишем код для ввода данных в текстовый файл.

  1. Во-первых, вам нужно объявить переменные для использования в коде.
  2. После этого нужно определить диапазон, который нужно записать в текстовый файл. И используйте количество ячеек диапазона в качестве счетчика цикла, определив его в переменной.
  3. Далее вам нужно определить адрес текстового файла, куда вы хотите добавить данные.
  4. Отсюда вам нужно объявить команду «FreeFile» переменной, чтобы получить номер файла.
  5. Теперь вам нужно создать команду «Вывод», так как вам нужно добавить данные в файл.
  6. Наконец, вам нужно использовать цикл «Для следующего», чтобы получить значения из диапазона одно за другим и добавить их в файл.
  7. Кроме того, вам необходимо использовать команду закрытия, чтобы закрыть текстовый файл после добавления в него данных.
  8. В конце концов, когда вы запускаете этот макрос, он добавляет данные из диапазона A1: A13 в текстовый файл, который вы сохранили по указанному вами пути.

Примечание: Обязательно измените путь к текстовому файлу из кода в соответствии с путем, который есть в вашей системе.

 Опция Явная
Sub data_to_text_file()
'переменные, которые нужно использовать в коде
Dim TextFile как целое число
Dim iCol как целое число
Dim myRange As Range
Dim cVal как диапазон
Dim i как целое число
Dim myFile как строка
'определить диапазон, который вы хотите написать
Установите myRange = Диапазон («A1: A13»)
iCol = мой диапазон. Количество
'путь к текстовому файлу  (ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ ЕГО) 
myFile = "C:\Users\Dell\Desktop\NewFolder\textfile.txt"
'определить FreeFile как переменный номер файла
Текстовый файл = Свободный файл
'используем команду append для добавления текста в конец файла
Откройте myFile для вывода в виде текстового файла
'цикл для добавления данных в текстовый файл
Для i = 1 To iCol
Печать #TextFile, ячейки (i, 1),
Печать #TextFile, ячейки (i, 2)
Далее я
'команда close, чтобы закрыть текстовый файл после добавления данных
Закрыть #TextFile
End Sub 

Блоги VBA:
Создать текстовый файл из таблицы Excel (function(h){h.className = h.className.replace(‘no-js’, ‘js’)})(document.documentElement)window.ga=window.ga||function( ){(ga.q=ga.q||[]).push(аргументы)};ga.l=+новая дата;ga(‘создать’, ‘UA-68417692-1’, ‘авто’);ga(‘require’, ‘eventTracker’, {attributePrefix: ‘data-‘});ga(‘отправить’, ‘просмотр страницы’); window.$zopim||(функция(d,s){var z=$zopim=function(c){z._.push(c)},$=z.

s= d.createElement(s),e=d. getElementsByTagName(s)[0];z.set=function(o){z.set._.push(o)};z._=[];z.set._=[];$.async=! 0;$.setAttribute(«charset»,»utf-8″); $.src=»https://v2.zopim.com/?3HrG1hc9mrdxRKjsAMI7myUpoeqfLNTO»;z.t=+новая дата;$.type=»text/javascript «;e.parentNode.insertBefore($,e)})(документ,»сценарий»);

5 июля 2019 г.

Добро пожаловать в блог VBA! На этой неделе мы собираемся расширить наш блог прошлой недели, касающийся селекторов пути к файлу.

Сегодня мы собираемся создать сценарий VBA, который создаст текстовый файл на основе определенной таблицы в книге Excel. Это полезно для создания текстовых шаблонов для различных целей, таких как загрузка данных в базы данных и другие системы, которые принимают только текстовые файлы.

Мы хотели бы сохранить следующую таблицу ( Table1 ) в Excel:

в текстовый файл, как показано ниже. В частности, мы хотим создать текстовый файл с тем же содержимым, что и в таблице Excel выше, и вставить пустые строки между строками с разными описаниями в столбце Memo. Также. Мы хотим сохранить структуру таблицы Excel без изменений:

Первый шаг включает объявление соответствующих переменных.

Dim filename As String, lineText As String

Dim myrng As Range

Dim i, j

Затем мы определяем путь к файлу на локальном диске, где мы хотим сохранить текстовый файл. Код «ThisWorkbook.path» определяет путь к файлу для текущей книги, и мы используем этот путь к файлу в качестве корневого каталога для текстового файла. Код «Рабочие листы («Таблица продуктов»). Имя» определяет имя сохраняемого текстового файла.

имя_файла = ThisWorkbook.path & «\» & Worksheets(«Таблица продуктов»).Name & «.txt»

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

Открыть имя файла для вывода как #1

Затем мы назначаем диапазон целевой таблицы ( Table1 ) предопределенной переменной myrng, и мы будем использовать эту переменную позже в коде.

Set myrng = Range(«Table1»)

Следующие несколько строк кода перебирают строки и столбцы таблицы с помощью цикла For. Мы уже рассказывали о цикле For в предыдущем блоге, вы можете прочитать об этом здесь.

для i = 1 to myrng.rows.count + 1

для j = 1 до myrng.columns.count

Далее J

Далее

Приведенная ниже строка кода вставлена ​​в петлю. мы записываем содержимое каждой строки в Table1 в текстовый файл. Код «IIf(j = 1, «», lineText & Chr(9))» определяет, что если j = 1, то печатается пустое значение, чтобы игнорировать содержимое первого столбца. Если нет, мы используем комбинированный контекст «lineText» и Chr(9), который эквивалентен горизонтальной вкладке, определенной в кодах ASCII. Chr(9) используется в качестве разделителя табуляции для текстового файла. Следующий код «myrng.Cells(i — 1, j)» находит содержимое предыдущей строки в таблице данных, а затем объединяется с контекстом, определенным ранее. Затем новый связанный контекст присваивается переменной «lineText», которая суммирует содержимое каждого столбца в таблице данных.

lineText = IIf(j = 1, «», lineText & Chr(9)) & myrng.Cells(i — 1, j)

После определения содержимого, которое будет напечатано в текстовом файле, мы распечатываем содержимое с использованием синтаксиса «Печать». Код ниже вставляет содержимое «lineText» в целевой текстовый файл построчно. Оператор print # записывает данные в формате отображения в последовательный файл. Первый параметр является обязательным, и может применяться любой допустимый номер файла. Следующий параметр — outputlist, в нашем случае это lineText, он определяет выражение, которое будет напечатано. Чтобы просмотреть более подробную информацию об операторе «Print #», перейдите сюда.

Print #1, lineText

Чтобы создать пустую строку между двумя записями с разными описаниями памятки, нам нужно написать дополнительный код. Приведенный ниже код идентифицирует содержимое третьего столбца таблицы данных. Во-первых, мы определяем критерии «i > 2», это используется для исключения строки заголовка, потому что мы не хотим вставлять пустую строку между заголовком и первой строкой таблицы данных. Если содержимое текущей строки таблицы данных в третьем столбце отличается от содержимого следующей строки, вставляется пустая строка. Если нет, то ничего не делайте.

If i > 2 And Cells(i, 3).Value <> Cells(i + 1, 3) Then

lineText = «»

Print #1, lineText

Else

      ‘Ничего не делать

Конец If

Затем мы заканчиваем цикл и закрываем текстовый файл, который определен как вывод #1:

Close #1

Объединив все строки кода вместе, мы получим следующее:

Sub SaveAsTxtFile()

Dim filename As String, lineText As String

Dim myrng As Range

Dim i, j

 

filename = ThisWorkbook.path & «\» & Worksheets(«Product Table»).Name & «.txt»

Открыть имя файла для вывода как #1

Set myrng = Range («Table1»)

   

Для i = 1 To myrng.Rows.Count + 1

Для j = 1 To myrng.Columns.Count

lineText = IIf(j = 1, «», lineText & Chr (9)) & myrng.