Excel VBA 将 .csv 文件转换为 Excel 文件

4
我有一个文件夹,里面有.csv、.xls和.xlsx文件。下面的代码是整个项目的一部分(当我删除下面的代码时,剩余的代码可以达到我的要求)。这段代码的大部分内容来自互联网上的某个地方。我希望这段代码只打开文件夹中的.csv文件,将它们转换成Excel文件,关闭文件,并删除文件夹中的.csv文件。但实际发生的是,代码创建的一个或两个文件都被从文件夹中删除了,我什么也没有了。非常感谢您的帮助。
Sub Test()
'
' Test Macro
'
'Set variables for the below loop
Dim MyFolder As String
Dim MyFile As String
Dim GetBook As String
Dim GetBook2 As String
Dim MyCSVFile As String
Dim KillFile As String
MyFolder = "REDACTED"
MyFile = Dir(MyFolder & "\*.xls")
MyCSVFile = Dir(MyFolder & "\*.csv")

'Open all of the .csv files in the folder and convert to .xls
Do While MyCSVFile <> ""
    Workbooks.Open Filename:=MyFolder & "\" & MyCSVFile
    GetBook = ActiveWorkbook.Name
    GetBook2 = Left(GetBook, Len(GetBook) - 4)
    ActiveSheet.Name = "Sheet1"
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=GetBook2, FileFormat:=56
    ActiveWorkbook.Close False
    Kill MyFolder & "\" & GetBook
Loop

End Sub

你为什么要保存为xlExcel8(如FileFormat:= 56)?有没有一些限制不能使用.XLSX(如xlOpenXMLWorkbook或FileFormat:= 51)? - user4039065
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Scott Craner
1个回答

2
您没有调用Dir函数以获取下一个文件。
Sub Test()
    'Set variables for the below loop
    Dim myFolder As String
    Dim getBook As String
    Dim myCSVFile As String

    Application.DisplayAlerts = False

    myFolder = Environ("TEMP") & Chr(92) & "REDACTED"

    myCSVFile = Dir(myFolder & "\*.csv")

    Do While myCSVFile <> ""
        Workbooks.Open Filename:=myFolder & "\" & myCSVFile
        getBook = ActiveSheet.Name  '<~ Sheet1 of an opened CSV is the name of the CSV
        ActiveSheet.Name = "Sheet1"
        ActiveWorkbook.SaveAs Filename:=myFolder & Chr(92) & getBook, FileFormat:=56
        ActiveWorkbook.Close False
        Kill myFolder & Chr(92) & myCSVFile  '<~~ delete the CSV, not the workbook
        myCSVFile = Dir   '<~~ this is important to get the next file in the folder listing
    Loop

End Sub

一个打开的CSV文件中唯一的工作表以CSV名(不带.CSV扩展名)命名,以便可以在Workbook.SaveAs 方法中使用。我已经使用了xlOpenXMLWorkbook作为SaveAs FileFormat类型。


谢谢您的快速回复!然而,代码似乎没有创建Excel文件,并且还删除了.CSV文件。代码已执行,但最终没有任何文件。在删除“Kill”行并重新运行后,文件夹中只包含两个.csv文件。似乎它甚至没有保存Excel文件。有什么想法吗?再次感谢。 - battery514
"MyFolder = 'REDACTED'" 不是一个完整的路径。它是相对于当前目录的(不一定是活动工作簿的目录)。这是想要成为活动工作簿路径的子文件夹吗? - user4039065
没有理由为什么要使用 .xls 而不是 .xlsx。这是大致的路径概述,名称已被编辑:我的文件夹 = “L:\Folder\Sub-Folder\Sub-Folder”。 - battery514
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - user4039065
太棒了。谢谢! - battery514

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接