我有多个.csv文件,我需要找到我目录中的长度。 (包含数据的行数。)我正在同一目录中的.xlsx文件中运行以下代码。 (我打算最终将.csv文件中的数据复制到.xlsx文件中。)
i = 1
FilePath = Application.ActiveWorkbook.Path & "\"
file = Dir(FilePath & "*.csv")
Do While Len(file) > 0
Open FilePath & file For Input As #1
length(i) = Cells(Rows.Count, 1).End(xlUp).Row
i = i + 1
Close #1
file = Dir
Loop
长度数组的所有值最终都为1,即使.csv文件可能长达15-20行。
答案 0 :(得分:1)
您实际上并没有在Excel中打开文件,因此无法计算有多少个单元格。尝试阅读多少行:
Open FilePath & file For Input As #1
While Not EOF(1): Line Input #1, trashLine: Wend
i = i + 1
Close #1
或者,在Excel中打开文件 - 测试 - 然后关闭:
Set tempWB = Workbooks.Open(FilePath & file)
i = i + tempWB.Sheets(1).Cells(tempWB.Sheets(1).Rows.Count, 1).End(xlUp).Row
tempWB.Close False
或者更快的方法是使用Windows脚本:
Dim i As Long
For Each varFile In _
Filter(Split(CreateObject("WScript.Shell").Exec("cmd /c find /v /c """" """ _
& ThisWorkbook.Path & "\*.csv""").StdOut.ReadAll, vbCrLf), ":")
i = i + CLng(Split(varFile, ":")(2))
Next
Debug.Print i
这样,如果你有10个文件,代码只能使用10个字符串,而不是打开/关闭文件或读取数千行...
答案 1 :(得分:0)
如@SOofWXLS
所述,您的代码不是在Excel中打开文件,而是为直接i / o打开它们。
这是一个完整的代码示例,它将使用您尝试的文件长度填充数组。
Dim fPath As String
Dim fName As String
Dim hFile As Long
Dim i As Long
Dim NumLines As Long
Dim length() As Long
Dim strLine As String
ReDim length(1 To 1)
fPath = Application.ActiveWorkbook.Path & "\"
fName = Dir(fPath & "*.csv")
Do While Len(fName) > 0
i = i + 1
NumLines = 0
ReDim Preserve length(1 To i)
hFile = FreeFile
Open fPath & fName For Input As hFile
Do While Not EOF(hFile)
Line Input #hFile, strLine
NumLines = NumLines + 1
Loop
Close hFile
length(i) = NumLines
fName = Dir
Loop
这也会动态扩展您的数组以容纳找到的文件。