尝试创建循环以打开活动工作簿文件夹中的每个.txt文件,以便能够从每个.txt文件中提取数据。
(来自.txt文件的数据将用于初始化数组)
我创建的当前代码为代码行提供了编译错误Invalid Use of Property
:
folder2 = ActiveWorkbook.path
我知道folder2
被定义为Folder
数据类型,因此分配字符串ActiveWorkbook.path
变量(以查找当前工作文件夹位置)很可能导致问题。
通过活动工作簿文件夹中的所有.txt文件(或引用工作簿文件夹路径的正确方法)的正确方法是什么?
参考:
How to import all text files from a folder
有问题的代码段:
' 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
答案 0 :(得分:1)
尝试使用GetFolder命令获取文件夹:
set folder2 = fso.getfolder(ActiveWorkbook.path)
由于它是一个对象变量,因此需要Set命令。
(另请注意,文件夹是FSO中的保留名称,因此您可能希望使用不同的变量名称,以避免混淆和可能的错误。)