#excel #vba
Вопрос:
Я разрабатываю функцию VBA для сбора определенных данных из различных текстовых файлов. В настоящее время функция идеально работает с одним файлом. Однако я хотел бы расширить его для зацикливания нескольких текстовых файлов.
Sub onlinecharges()
Workbooks.Add
Dim myFolder As String, mtext As String, textline As String, po_charges As Integer
myFolder = Application.GetOpenFilename()
Open myFolder For Input As #1
Do Until EOF(1)
Line Input #1, textline
text = text amp; textline
Loop
Close #1
po_charges = InStr(text, "NET CHARGES")
ActiveWorkbook.Sheets(1).Cells(2, 1).Value = Dir(myFolder)
ActiveWorkbook.Sheets(1).Cells(2, 2).Value = Abs(Mid(text, po_charges 88, 8))
End Sub
В настоящее время имя файла указывается в A2, конкретные данные-в B2.
Результатом моего желания являются имена файлов от A2 до Ai, конкретные данные от B2 до Bi.
Итак, как я могу добавить цикл для сканирования нескольких выбранных текстовых файлов?
Очень признателен! Спасибо!
Ответ №1:
В этом решении он позволяет выбирать несколько текстовых файлов.
Sub LoopAllSelectedTextFilesInAFolder()
Dim rw As Integer: rw = 2
' Loop through all files in a folder
Dim Filename As Variant
Filename = Application.GetOpenFilename(FileFilter:="Text Files (*.txt), *.txt", Title:="Select file(s)", MultiSelect:=True)
' Check if Cancel button was pressed
If Not IsArray(Filename) Then
MsgBox " No files selected!", vbInformation
Exit Sub
End If
Application.ScreenUpdating = False
' Loop through selected files
Dim i As Integer
For i = 1 To UBound(Filename)
Open Filename(i) For Input As #1
Do Until EOF(1)
Line Input #1, textline
Text = Text amp; textline
Loop
Close #1
' Write filename amp; Text
ActiveWorkbook.Sheets(1).Cells(rw, 1).Value = Filename
ActiveWorkbook.Sheets(1).Cells(rw, 2).Value = Text
' next row
rw = rw 1
' Clear Text
Text = ""
Next i
Application.ScreenUpdating = True
End Sub
Комментарии:
1. Спасибо за предложения, и это работает для фиксированного пути! Но мои файлы находятся в разных местах, что делать, если я использую GetOpenFileName?
2. @dreamaymc, я только что обновил код с помощью
GetOpenFilename
.3. большое вам спасибо!! Теперь я понимаю, почему мой цикл не удался ,еще раз большое спасибо!
4. @dreamaymc, если пост был полезен, не забудьте поставить на нем галочку!