【问题标题】:Excel VBA Convert .csv to Excel FileExcel VBA 将 .csv 转换为 Excel 文件
【发布时间】:2015-09-02 17:57:01
【问题描述】:

我有一个包含 .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)?
  • 我可能错了,但你不想要 {...Filename: = myfolder & "\" & GetBook2 & ".xls" ...}

标签: vba excel csv


【解决方案1】:

您没有调用Dir function 来获取下一个文件。

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 method 中使用。我使用 xlOpenXMLWorkbook 作为 SaveAs FileFormat 类型。

【讨论】:

  • 感谢您的快速回复!但是,代码似乎没有创建 Excel 文件,并且还在删除 .CSV 文件。代码执行了,我最终没有文件。删除“Kill”行并重新运行后,该文件夹仅包含两个 .csv 文件。似乎它甚至没有保存 Excel 文件。想法?再次感谢。
  • MyFolder = "REDACTED" 不是一个完整的开始路径。它相对于当前目录(不一定是活动工作簿的目录)。它是否打算成为活动工作簿路径的子文件夹?
  • 没有理由说明为什么是 .xls 而不是 .xlsx。这是路径的粗略轮廓,名称已编辑:MyFolder = "L:\Folder\Sub-Folder\Sub-Folder"
  • 我已经删除了所有不必要的代码,只留下了执行您所描述的任务绝对需要的代码。编辑并将Environ("TEMP") &amp; Chr(92) &amp; "REDACTED" 更改为L:\Folder\Sub-Folder\Sub-Folder。这是在我的 %TEMP% 文件夹的子文件夹中测试并按预期执行的。
  • 太棒了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
相关资源
最近更新 更多