Как я могу создать новый файл Excel/Workbook в VBA, не открывая его автоматически? Создать файл vba excel
Создание и запись в текстовый файл с использованием макроса excel и VBA
Вы можете объединить данные в массив и затем преобразовать его в текст.
Sub ExcelToTxt() 'Declaring variables Dim i As Long, j As Integer Dim n As Long, k As Long Dim destgroup As String Dim FName As String Dim vDB, vR(1 To 6), vJoin(), vResult() Dim sJoin As String, sResult As String Dim s As Long 'Activate Sheet1 Sheet1.Activate 'Find the last row that contains data With Sheet1 vDB = .Range("a1").CurrentRegion '<~~ get data to array from your data range n = UBound(vDB, 1) 'size of array (row of 2 dimension array) End With 'Create txt file FName = Application.GetSaveAsFilename("", "txt file (*.txt), *.txt") For i = 2 To n '<~~loop destgroup = vDB(i, 2) '<~~ second column If destgroup = "trex_15hz" Or destgroup = "trex_10hz" Or destgroup = "trex_5hz" Then vR(1) = "; ### LABEL DEFINITION ###" '<~~ text 1st line s = Val(Replace(vDB(i, 3), "label", "")) vR(2) = "EQ_LABEL_DEF,02," & Format(s, "000") vR(3) = "UDB_LABEL," & Chr(34) & vDB(i, 4) & Chr(34) '<~~ 2nd line ReDim vJoin(4 To 7) vJoin(4) = Chr(34) & vDB(i, 4) & Chr(34) For j = 5 To 7 vJoin(j) = vDB(i, j) Next j sJoin = Join(vJoin, ",") vR(4) = "STD_SUB_LABE," & sJoin '<~~ 3th line ReDim vJoin(8 To 12) vJoin(8) = Chr(34) & UCase(vDB(i, 8)) & Chr(34) vJoin(9) = Chr(34) & vDB(i, 9) & Chr(34) vJoin(10) = Format(vDB(i, 10), "#.000000000") For j = 11 To 12 vJoin(j) = vDB(i, j) Next j sJoin = Join(vJoin, ",") vR(5) = "STD_SUB_LABE," & sJoin '<~~ 4the line vR(6) = "END_EQ_LABEL_DEF" '<~~ 5th line k = k + 1 ReDim Preserve vResult(1 To k) vResult(k) = Join(vR, vbCrLf) '<~~ 5 line in array vR and get to array vResult with join method End If Next i sResult = "EQUIPMENT_ID_DEF,02,0x1," & Chr(34) & "trex" & Chr(34) '<~~ text file first line sResult = sResult & vbCrLf & Join(vResult, vbCrLf) '<~~ combine 1th and other line ConvertText FName, sResult '<~~ sub presedure End Sub Sub ConvertText(myfile As String, strTxt As String) Dim objStream Set objStream = CreateObject("ADODB.Stream") With objStream '.Charset = "utf-8" .Open .WriteText strTxt .SaveToFile myfile, 2 .Close End With Set objStream = Nothing End Substackoverrun.com
Macro VBA Excel создать дату файла XML
с макросом VBA в Excel Мне нужно преобразовать дату на 1 лист в файл excel. Для этого я уже создал скрипт, но у меня есть проблема, чтобы правильно генерировать дату в XML. Мне нужна первая строка заголовка, а затем формула считывает все строки с данными.
Sub createXML() Sheets("Sheet1").Select FullPath = baseDirectory & projectName & "\xmlBatch\inputTest.xml" Set objStream = CreateObject("ADODB.Stream") objStream.Charset = "iso-8859-1" objStream.Open objStream.WriteText ("<?xml version='1.0' encoding='UTF-8'?>" & vbLf) objStream.WriteText ("<y:input xmlns:y='http://www.test.com/engine/3'>" & vbLf) objStream.WriteText (" <y:datas>" & vbLf) objStream.WriteText (" <y:instance yid='theGeneralData'>" & vbLf) objStream.WriteText ("" & vbLf) objStream.WriteText ("<language yid='LANG_en' />" & vbLf) objStream.WriteText ("<client yclass='Client'>" & vbLf) objStream.WriteText (" <firstName>" & Cells(1, 1).Text & "</firstName>" & vbLf) objStream.WriteText (" <lastName>" & Cells(1, 2).Text & "</lastName>" & vbLf) objStream.WriteText (" <age>" & Cells(1, 3).Text & "</age>" & vbLf) objStream.WriteText (" <civility yid='" & toYID(Cells(1, 4).Text) & "' />" & vbLf) objStream.WriteText ("</client>" & vbLf) objStream.WriteText ("" & vbLf) objStream.WriteText (" </y:instance>" & vbLf) objStream.WriteText (" </y:datas>" & vbLf) objStream.WriteText ("</y:input>" & vbLf) objStream.SaveToFile FullPath, 2 objStream.Close End Subenter image description here
Но мой выход для теперь это:
> <?xml version='1.0' encoding='UTF-8'?> <y:input xmlns:y='http://www.test.com/engine/3'> <y:datas> <y:instance yid='theGeneralData'> <language yid='LANG_en' /> <client yclass='Client'> <firstName>firstName</firstName> <lastName>lastName</lastName> <age>age</age> <civility yid='CIVILITY' /> </client> </y:instance> </y:datas> </y:input>stackoverrun.com
Создайте цикл, чтобы открыть несколько файлов и скопировать данные в главный файл в VBA excel
У меня есть несколько файлов с данными, которые необходимо перенести в один главный файл со всеми данными в одну строку.
Я полный нуб в программировании, так что если код, который я до сих пор не имеет никакого смысла, то, пожалуйста, не стесняйтесь, чтобы изменить его
я смог найти это «Loop всех Excel файлов в папка "с сайта www.TheSpreadsheetGuru.com Код работает отлично, он откроет каждый файл отдельно в папке, а затем закроет его, а затем откроет следующий файл и закроет его, пока он не пройдет через каждый файл в этой папке ,
Однако я хотел бы вставить цикл цикла «копировать и вставлять данные» в цикл. Итак, что должно произойти, код откроет «File1» в папке, а затем скопирует и вставляет данные в «Мастер-файл» в ячейке A4. Затем он закроет «File1», а затем откройте «File2» и скопируйте данные в «Мастер-файл» в ячейке A5, а затем закройте «File2». Он повторит это, пока все файлы в папке не будут открыты/закрыты.
Это код, который у меня есть прямо сейчас, но я не могу заставить код для копирования и вставки правильно работать. Мне сложно определить, как установить цикл, где код будет знать, в каком файле он находится сейчас, и установить счетчик для ячейки основного файла, в который он вставляется.
Решение: Создание текстового файла - VBA
Необходимо создать текстовый файл: Создать типизированный файл, содержащий данные о фирмах: название фирмы, фамилия и инициалы владельца (одно поле), адрес (три поля: город, улица, дом), телефон. Переписать в текстовый файл и вывести в ячейки эл. таблицы данные о владельцах фирм, фамилия которых начинается с буквы М; Делаю по образу в методичке:Sub create_file_txt() Dim F As FIRMA Dim kol As Integer Dim str As String kol = InputBox("введите количество фирм") Open "C:\Users\Виталий\Desktop\VB и VBA\Задания\Екатерина Корожбина\firma" For Random As #1 Len = Len(F) For I = 1 To kol F.FIRMA = InputBox("Введите название фирмы:") F.fio = InputBox("Введите фамилию, имя, отчество:") F.city = InputBox("Введите город:") F.street = InputBox("Введите название улиц:") F.house = InputBox("Введите номер дома:") F.telefon = InputBox("Введите номер телефона:") 'str = CStr(F.FIRMA) + "," + CStr(F.fio) + "," + CStr(F.city) + "," + CStr(F.street) + "," + CStr(F.house) + "," + CStr(F.telefon) Put #1, I, F Next I Close #1 End SubНо выдает ошибку: Run-time error 59 Bad record lenght Пробовала формировать строкуSub create_file_txt() Dim F As FIRMA Dim kol As Integer Dim str As String kol = InputBox("ââåäèòå êîëè÷åñòâî ôèðì") Open "C:\Users\ÂèòГ*ëèé\Desktop\VB ГЁ VBA\Г‡Г*Г¤Г*Г*ГЁГї\Г…ГЄГ*òåðèГ*Г* ÊîðîæáèГ*Г*\firma" For Random As #1 Len = Len(F) For I = 1 To kol F.FIRMA = InputBox("Введите название фирмы:") F.fio = InputBox("Введите фамилию, имя, отчество:") F.city = InputBox("Введите город:") F.street = InputBox("Введите название улиц:") F.house = InputBox("Введите номер дома:") F.telefon = InputBox("Введите номер телефона:") ' ***** str = CStr(F.FIRMA) + "," + CStr(F.fio) + "," + CStr(F.city) + "," + CStr(F.street) + "," + CStr(F.house) + "," + CStr(F.telefon) ' ***** Put #1, I, str ' Put #1, I, F.fio ', f.fio" ', f.city , f.street, f.house , f.telefon Next I Close #1 End Subтакже выдает ошибку: Run-time error 59 Bad record lenght Как мне записать данные в txt файл?Создание текстовых файлов по таблице Excel
Макрос предназначен для создания текстовых файлов в кодировке UTF-8.
Исходными данными является таблица Excel из 12 столбцов.
Сначала, макрос создаёт папку для будущих текстовых файлов.Папка создаётся в том же каталоге, где расположена книга Excel.
Далее, для каждой строки таблицы, макрос формирует подпапку,используя в качестве её названия текст из 7-го столбца таблицы.
И потом, когда папка для файла создана, макрос создаёт текстовый файл с содержимым из 10 столбца таблицы,и сохраняет его под именем, взятым из второго столбца той же таблицы Excel.После создания файла, у него меняется кодировка на UTF-8 (изначально, при создании, файлы имеют кодировку Unicode)
По окончании работы макроса, открывается папка, содержащая созданные текстовые файлы.
Пример макроса смотрите в прикреплённом файле.
Код макроса, создающего папки, подпапки, и текстовые файлы по данным из таблицы Excel:
Sub СозданиеТекстовыхФайлов() On Error Resume Next Dim cell As Range, ra As Range Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, 11) arr = ra.Value ' считываем данные в массив Set FSO = CreateObject("scripting.filesystemobject") ' создаём главную папку BaseFolder$ = ThisWorkbook.Path & "\Товар по группам\": MkDir BaseFolder$ ' перебираем все строки For i = LBound(arr) To UBound(arr) ' создаём папку для очередной строки (если папки ещё нет) Folder$ = BaseFolder$ & arr(i, 7) & "\" ' имя папки - в столбце G MkDir Folder$ ' формируем имя создаваемого текстового файла Filename$ = Folder$ & Trim(arr(i, 2)) & ".txt" ' создаём файл в кодировке Unicode Set ts = FSO.CreateTextFile(Filename$, True, True) ts.Write Trim(arr(i, 10)) ' данные в файл - из ячейки 10-го столбца ts.Close ' если текстовый файл нужен в другой кодировке ChangeFileCharset Filename$, "utf-8" Next i Set ts = Nothing: Set FSO = Nothing MsgBox "Файлы созданы, и помещены в папку" & vbNewLine & BaseFolder$, vbInformation, "Готово" ' открываем папку с файлами CreateObject("wscript.shell").Run "explorer.exe /e, """ & BaseFolder$ & """" End Subprays.xls | 38.5 КБ | 233 | 27 недель 4 часа назад |
excelvba.ru
vba - Как я могу создать новый файл Excel/Workbook в VBA, не открывая его автоматически?
Если вы планируете создавать 40 000 новых файлов, то .Add и .SaveAs замедлят ваш компьютер. И так как вы не хотите его открывать, я бы рекомендовал использовать ACE для этого. Вот краткий пример.
UNTESTED (на основе примера VB.Net ЗДЕСЬ)
Sub Sample() Dim cn As New ADODB.Connection, cmd As New ADODB.Command Dim FilePath As String Dim i As Long '~~> Folder to save the files FilePath = "C:\Temp\" For i = 1 To 40000 sFileName = FilePath & " File - " & i & ".xlsx" With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & sFileName & "Extended Properties=""Excel 12.0 Xml;HDR=YES;" .Open Set cmd = New ADODB.Command cmd.ActiveConnection = cn '~~> Command to create the table cmd.CommandText = "CREATE TABLE Sheet1 (Sno Int, " & _ "Employee_Name VARCHAR, " & _ "Company VARCHAR, " & _ "Date_Of_joining DATE, " & _ "Stipend DECIMAL, " & _ "Stocks_Held DECIMAL)" '~~> Adding Data cmd.CommandText = "INSERT INTO Sheet1 (Sno, Employee_Name, " & _ "Company,Date_Of_joining,Stipend,Stocks_Held) " & _ "values ('1', 'Siddharth Rout', 'Defining Horizons', " & _ "'20/7/2014','2000.75','0.01')" cmd.Execute .Close End With Next i End Subqaru.site
Создание текстового файла и ввод текста в файл
Sub Test()Open "c:\2.txt" For Output As #1
Print #1, "Hello File"
Close #1
Open "c:\1.txt" For Input As #1
Dim s As String
Input #1, s
MsgBox s
Close #1
End Sub
Создание текстового файла и ввод текста (определение конца файла)
Sub Test()Open "c:\1.txt" For Output As #1
Print #1, "Hello , File"
Close #1
Open "c:\1.txt" For Input As #1
Dim s As String
While Not EOF(1)
Input #1, s
MsgBox s
Wend
Close #1
End Sub
Создание документов Word на основе таблицы Excel
Sub ReportToWord()Dim intReportCount As Integer ' Количество сообщений
Dim strForWho As String ' Получатель сообщения
Dim strSum As String ' Сумма за товар
Dim strProduct As String ' Название товара
Dim strOutFileName As String ' Имя файла для сохранения сообщения
Dim strMessage As String ' Текст дополнительного сообщения
Dim rgData As Range ' Обрабатываемые ячейки
Dim objWord As Object
Dim i As Integer
' Создание объекта Word
Set objWord = CreateObject("Word.Application")
' Информация с рабочего листа
Set rgData = Range("A1")
strMessage = Range("E6")
' Просмотр записей на листе Лист1
intReportCount = Application.CountA(Range("A:A"))
For i = 1 To intReportCount
' Динамические сообщения в строке состояния
Application.StatusBar = "Создание сообщения " & i
' Назначение данных переменным
strForWho = rgData.Cells(i, 1).Value
strProduct = rgData.Cells(i, 2).Value
strSum = Format(rgData.Cells(i, 3).Value, "#,000")
' Имя файла для сохранения отчета
strOutFileName = ThisWorkbook.path & "\" & strForWho & ".doc"
' Передача команд в Word
With objWord
.Documents.Add
With .Selection
' Заголовок сообщения
.Font.Size = 14
.Font.Bold = True
.ParagraphFormat.Alignment = 1
.TypeText Text:="О Т Ч Е Т"
' Дата
.TypeParagraph
.TypeParagraph
.Font.Size = 12
.ParagraphFormat.Alignment = 0
.Font.Bold = False
.TypeText Text:="Дата:" & vbTab & _
Format(Date, "mmmm d, yyyy")
' Получатель сообщения
.TypeParagraph
.TypeText Text:="Кому: менеджеру " & vbTab & strForWho
' Отправитель
.TypeParagraph
.TypeText Text:="От:" & vbTab & Application.UserName
' Сообщение
.TypeParagraph
.TypeParagraph
.TypeText strMessage
.TypeParagraph
.TypeParagraph
' Название товара
.TypeText Text:="Продано товара:" & vbTab & strProduct
.TypeParagraph
' Сумма за товар
.TypeText Text:="На сумму:" & vbTab & _
Format(strSum, "$#,##0")
End With
' Сохранение документа
.ActiveDocument.SaveAs FileName:=strOutFileName
End With
Next i
' Удаление объекта Word
objWord.Quit
Set objWord = Nothing
' Обновление строки состояния
Application.StatusBar = False
' Вывод на экран информационного сообщения
MsgBox intReportCount & " заметки создано и сохранено в папке " _
& ThisWorkbook.path
End Sub
Команды создания и удаления каталогов
Sub Test()MkDir ("c:\test")
End Sub
И удаляем.
Sub Test()
RmDir ("c:\test")
End Sub
Получение текущего каталога
Sub Test()MsgBox (CurDir)
End Sub
Смена каталога
Sub Test()ChDir ("c:\windows")
MsgBox (CurDir)
End Sub
Посмотреть все файлы в каталоге_1
Sub Test()Dim s As String
s = Dir("c:\windows\inf\*.*")
Debug.Print s
Do While s ""
s = Dir
Debug.Print s
Loop
End Sub
Посмотреть все файлы в каталоге_2
' Объявление API-функции для отображения стандартного окна _просмотра папок
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
' Объявление API-функции для преобразования данных, возвращаемых _
функцией SHBrowseForFolder, в строку
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal _
pszPath As String) As Long
' Структура используется функцией SHBrowseForFolder
Type BROWSEINFO
hwndOwner As Long ' Родительское окно (для диалога)
pidlRoot As Long ' Корневая папка для просмотра
strDisplayName As String
strTitle As String ' Заголовок окна
ulFlags As Long ' Флаги для окна
' Следующие три параметра в VBA не используются
lpfn As Long
lParam As Long
iImage As Long
End Type
Sub BrowseFolder()
Dim strPath As String ' Папка, список файлов которой выводится
Dim strFile As String
Dim intRow As Long ' Текущая строка таблицы
' Выбор папки
strPath = dhBrowseForFolder()
If strPath = "" Then Exit Sub
If Right(strPath, 1) "\" Then strPath = strPath & "\"
' Оформление заголовка отчета
ActiveSheet.Cells.ClearContents
ActiveSheet.Cells(1, 1) = "Имя файла"
ActiveSheet.Cells(1, 2) = "Размер"
ActiveSheet.Cells(1, 3) = "Дата/время"
ActiveSheet.Range("A1:C1").Font.Bold = True
' Просмотр объектов в папке...
' Первый объект папки
strFile = Dir(strPath, 7)
intRow = 2
Do While strFile ""
' Запись в столбец "A" имени файла
ActiveSheet.Cells(intRow, 1) = strFile
' Запись в столбец "B" размера файла
ActiveSheet.Cells(intRow, 2) = FileLen(strPath & strFile)
' Запись в столбец "C" времени изменения файла
ActiveSheet.Cells(intRow, 3) = FileDateTime(strPath & strFile)
' Следующий объект папки
strFile = Dir
intRow = intRow + 1
Loop
End Sub
Function dhBrowseForFolder() As String
Dim biBrowse As BROWSEINFO
Dim strPath As String
Dim lngResult As Long
Dim intLen As Integer
' Заполнение полей структуры BROWSEINFO
' Корневая папка - Рабочий стол
biBrowse.pidlRoot = 0&
' Заголовок окна
biBrowse.strTitle = "Выбор папки"
' Тип возвращаемой папки
biBrowse.ulFlags = &h2
' Вывод стандартного окна просмотра папок
lngResult = SHBrowseForFolder(biBrowse)
' Обработка результата работы окна
If lngResult Then
' Получение пути (по возвращенным данным)
strPath = Space$(512)
If SHGetPathFromIDList(ByVal lngResult, ByVal strPath) Then
' Строка пути заканчивается символом Chr(0)
intLen = InStr(strPath, Chr$(0))
' Выделение и возврат пути
dhBrowseForFolder = Left(strPath, intLen - 1)
Else
' Не удалось получить путь
dhBrowseForFolder = ""
End If
Else
' Пользователь нажал кнопку "Отмена"
dhBrowseForFolder = ""
End If
End Function
topuch.ru