VBA 从工作表循环创建文本文件
VBA creating textfiles in a loop from a worksheet
我正在尝试创建一个循环来处理多个 excel 文件并为每个 excel 文件创建文本文件。我已经走了很长一段路,但我 运行 遇到了一个错误。
我有三段代码:1) 一个循环,2) 一些计算 3) 创建文本文件。它们彼此分开,就像一个魅力,但是当我把它们放在一个单独的子中时(如下面的循环所示)我得到 "Bad file mode (Error 54)" 命令 [Print #1, Left$(strOutput, Len(strOutput ) - 1) ' strString] 在创建文本文件时。我不明白为什么不同的代码之间会发生冲突。
循环如
Sub GEF_Processor()
Dim i As Integer
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = True
.Show
End With
For i = 1 To fd.SelectedItems.Count
addNewWorkBook (fd.SelectedItems.Item(i))
Call macro3
Next i
Set fd = Nothing
End Sub
文本文件的创建过程如下
Sub macro3()
Dim hndFile As Long
Dim intColumn As Integer
Dim intLast_Column As Integer
Dim lngLast_Row As Long
Dim lngRow As Long
Dim strOutput As String
intLast_Column = Worksheets("CPT_DEL_AFT").UsedRange.Column - 1 + Worksheets("CPT_DEL_AFT").UsedRange.Columns.Count
lngLast_Row = Worksheets("CPT_DEL_AFT").UsedRange.Rows(Worksheets("CPT_DEL_AFT").UsedRange.Row s.Count).Row
hndFile = FreeFile
Open "-DEL_AFT.gef" For Output As hndFile
For lngRow = 1& To lngLast_Row
strOutput = ""
For intColumn = 1 To intLast_Column
strOutput = strOutput & Worksheets("CPT_DEL_AFT").Cells(lngRow, intColumn).Value & " "
Next intColumn
If Len(Trim$(Replace(strOutput, ";", ""))) > 0 Then
Print hndFile, Left$(strOutput, Len(strOutput) - 1) ' strString
End If
Next lngRow
Close #hndFile
End Sub
您的代码有点不一致,您正在使用 hndFile 创建文件并使用 #1 打印到它:
Open strName & "-DEL_AFT.gef" For Output As hndFile
并且:
Print #1, Left$(strOutput, Len(strOutput) - 1)
将 Print 语句更改为以下内容以保持一致性:
Print #hndFile, Left$(strOutput, Len(strOutput) - 1)
我正在尝试创建一个循环来处理多个 excel 文件并为每个 excel 文件创建文本文件。我已经走了很长一段路,但我 运行 遇到了一个错误。
我有三段代码:1) 一个循环,2) 一些计算 3) 创建文本文件。它们彼此分开,就像一个魅力,但是当我把它们放在一个单独的子中时(如下面的循环所示)我得到 "Bad file mode (Error 54)" 命令 [Print #1, Left$(strOutput, Len(strOutput ) - 1) ' strString] 在创建文本文件时。我不明白为什么不同的代码之间会发生冲突。
循环如
Sub GEF_Processor()
Dim i As Integer
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = True
.Show
End With
For i = 1 To fd.SelectedItems.Count
addNewWorkBook (fd.SelectedItems.Item(i))
Call macro3
Next i
Set fd = Nothing
End Sub
文本文件的创建过程如下
Sub macro3()
Dim hndFile As Long
Dim intColumn As Integer
Dim intLast_Column As Integer
Dim lngLast_Row As Long
Dim lngRow As Long
Dim strOutput As String
intLast_Column = Worksheets("CPT_DEL_AFT").UsedRange.Column - 1 + Worksheets("CPT_DEL_AFT").UsedRange.Columns.Count
lngLast_Row = Worksheets("CPT_DEL_AFT").UsedRange.Rows(Worksheets("CPT_DEL_AFT").UsedRange.Row s.Count).Row
hndFile = FreeFile
Open "-DEL_AFT.gef" For Output As hndFile
For lngRow = 1& To lngLast_Row
strOutput = ""
For intColumn = 1 To intLast_Column
strOutput = strOutput & Worksheets("CPT_DEL_AFT").Cells(lngRow, intColumn).Value & " "
Next intColumn
If Len(Trim$(Replace(strOutput, ";", ""))) > 0 Then
Print hndFile, Left$(strOutput, Len(strOutput) - 1) ' strString
End If
Next lngRow
Close #hndFile
End Sub
您的代码有点不一致,您正在使用 hndFile 创建文件并使用 #1 打印到它:
Open strName & "-DEL_AFT.gef" For Output As hndFile
并且:
Print #1, Left$(strOutput, Len(strOutput) - 1)
将 Print 语句更改为以下内容以保持一致性:
Print #hndFile, Left$(strOutput, Len(strOutput) - 1)