如何使用多个文本文件初始化一个数组 – VBA

尝试创build一个循环来打开活动工作簿文件夹中的每个.txt文件,以便能够从每个.txt文件中提取数据。

(.txt文件中的数据将用于初始化数组)


我创build的当前代码给出编译错误对于代码行Invalid Use of Property
folder2 = ActiveWorkbook.path

我知道folder2被定义为一个Folder数据types,因此分配stringActiveWorkbook.pathvariables(查找当前工作文件夹位置)最有可能导致该问题。

在活动工作簿文件夹中的所有.txt文件(或引用工作簿文件夹path的正确方法)的正确方法是什么?


参考: 如何从文件夹中导入所有文本文件


有问题的代码片段:

 ' Loop thru all files in the folder folder = ActiveWorkbook.path path = folder & "\*.txt" Filename = Dir(path) ' Get a FileSystem object Set fso = New FileSystemObject ' get the directory you want folder2 = ActiveWorkbook.path For Each file In folder.Files Set FileText = file.OpenAsTextStream(ForReading) 

完整代码:

 Option Explicit Sub Initialize_barcode_lookup_Array() Dim fso As FileSystemObject Dim folder As String, path As String, count_txt_files As Long, Filename As String Dim folder2 As folder Dim file As file Dim FileText As TextStream Dim TextLine As String Dim Items() As String Dim i As Long, j As Long, k As Long Dim cl As Range Dim shipping_plan As Long 'Number of shipping plans text files imported Dim barcode_lookup() As String Dim lastRow As Long Dim longest_lastRow As Long Dim counter As Long Dim FNSKU_Input As String 'Count the number of files in working directory ( - 1, for the Excel spreadsheet) folder = ActiveWorkbook.path path = folder & "\*.txt" Filename = Dir(path) Do While Filename <> "" count_txt_files = count_txt_files + 1 Filename = Dir() Loop 'Range("Q8").Value = count MsgBox count_txt_files & " : files found in folder" 'Define longest_lastRow longest_lastRow = 0 'Define i i = 0 ' Loop thru all files in the folder folder = ActiveWorkbook.path path = folder & "\*.txt" Filename = Dir(path) ' Get a FileSystem object Set fso = New FileSystemObject ' get the directory you want folder2 = ActiveWorkbook.path 'fso.GetFolder("D:\YourDirectory\") For Each file In folder.Files Set FileText = file.OpenAsTextStream(ForReading) 'Define lastRow lastRow = Range("A1").End(xlDown).Row 'Last row of the data set 'Make sure longest_lastRow is the largest value found of lastRow within all _ 'shipping plan .txt files If lastRow > longest_lastRow Then longest_lastRow = lastRow 'Redimension Array barcode_lookup() ReDim barcode_lookup(count_txt_files - 1, longest_lastRow, 9) ' Read the file one line at a time Do While Not FileText.AtEndOfStream TextLine = FileText.ReadLine cl = TextLine 'Initialize Array For j = 0 To (lastRow - 1) 'UBound(barcode_lookup(lastRow - 1)) For k = 0 To 9 barcode_lookup(i, j, k) = cl cl = cl.Offset(0, k + 1).Value Next k 'Set cl one row down, and set column back to 0 cl = cl.Offset(j + 1, k - 9) Next j Loop ' Clean up FileText.Close i = i + 1 Next file Set FileText = Nothing Set file = Nothing Set folder2 = Nothing Set fso = Nothing End Sub 

尝试GetFolder命令来拿起一个文件夹:

 set folder2 = fso.getfolder(ActiveWorkbook.path) 

由于它是一个对象variables,所以需要Set命令。

(另外请注意,文件夹是FSO中的保留名称,因此您可能需要使用不同的variables名称,以避免混淆和可能的错误。)