【发布时间】:2018-07-11 22:03:22
【问题描述】:
我需要将选择的 .csv 文件以相同的名称保存为 制表符分隔 文件。
我有如下代码选择文件,指定分隔符,然后遍历文件,一个一个打开保存。
问题在于迭代。
Sub sandbox2()
Dim xFilesToOpen As Variant
Dim i As Integer
Dim xWb As Workbook
Dim xTempWb As Workbook
Dim xDelimiter As String
Dim xScreen As Boolean
Dim strFileFullName As String
On Error GoTo ErrHandler
xScreen = Application.ScreenUpdating
Application.ScreenUpdating = False
xFilesToOpen = Application.GetOpenFilename("Text Files (*.*), *.*", , , , True)
xDelimiter = Application.InputBox("Delimiter: ", , ",")
If TypeName(xFilesToOpen) = "Boolean" Then
MsgBox "No files were selected", , "Sorry dude"
GoTo ExitHandler
End If
For i = 1 To UBound(xFilesToOpen)
Set xTempWb = Workbooks.Open(xFilesToOpen(i))
strFileFullName = Replace(ActiveWorkbook.FullName, ".csv", "")
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=strFileFullName + ".txt", FileFormat:=xlText, CreateBackup:=False
xTempWb.Close False
Application.DisplayAlerts = True
ActiveWorkbook.Close savechanges:=False
Set xTempWb = Nothing
Next i
ExitHandler:
Application.ScreenUpdating = xScreen
Set xWb = Nothing
Set xTempWb = Nothing
Exit Sub
ErrHandler:
MsgBox Err.Description, , "error"
Resume ExitHandler
End Sub
此代码适用于第一个文件,但随后出现错误
“对象变量或未设置块变量”
查看文件夹时,第一个文件保存为.txt文件,但只有第一个。
【问题讨论】:
-
当您之前已经使用
xTempWb.Close False关闭了工作簿时,ActiveWorkbook.Close savechanges:=False行在循环中做了什么?另外我会将ActiveWorkbook.SaveAs替换为xTempWb.SaveAs,因为引用活动工作簿不可靠。如果没有帮助,请不要让我们猜测并说明错误出现在哪一行。