Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA将.csv转换为Excel文件_Vba_Excel_Csv - Fatal编程技术网

Excel VBA将.csv转换为Excel文件

Excel VBA将.csv转换为Excel文件,vba,excel,csv,Vba,Excel,Csv,我有一个文件夹,其中包含.csv文件、.xls文件和xlsx文件。下面的代码是整个项目的一部分(当我删除下面的代码时,剩下的代码实现了我想要的)。大部分代码是从某处编译的(这里和互联网周围)。我希望代码只打开文件夹中的.csv文件,将其转换为Excel文件,关闭文件,然后删除文件夹中的.csv文件。代码的最终结果是,由代码创建的一个或两个文件被从文件夹中删除,而我什么也没有留下。提前感谢您的帮助 Sub Test() ' ' Test Macro ' 'Set variables for the

我有一个文件夹,其中包含.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
子测试()
'
'测试宏
'
'为下面的循环设置变量
将MyFolder设置为字符串
将MyFile设置为字符串
将GetBook设置为字符串
将GetBook2设置为字符串
将MyCSVFile设置为字符串
将文件设置为字符串
MyFolder=“已编辑”
MyFile=Dir(MyFolder&“\*.xls”)
MyCSVFile=Dir(MyFolder&“\*.csv”)
'打开文件夹中的所有.csv文件并转换为.xls
在MyCSVFile“”时执行此操作
工作簿。打开文件名:=MyFolder&“\”&MyCSVFile
GetBook=ActiveWorkbook.Name
GetBook2=左(GetBook,Len(GetBook)-4)
ActiveSheet.Name=“Sheet1”
Application.DisplayAlerts=False
ActiveWorkbook.SaveAs文件名:=GetBook2,文件格式:=56
ActiveWorkbook.Close为False
杀死MyFolder&“\”&GetBook
环
端接头
您没有调用以获取下一个文件

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
子测试()
'为下面的循环设置变量
将myFolder设置为字符串
将getBook设置为字符串
将myCSVFile设置为字符串
Application.DisplayAlerts=False
myFolder=Environment(“临时”)&Chr(92)和“已编辑”
myCSVFile=Dir(myFolder&“\*.csv”)
在myCSVFile“”时执行此操作
工作簿。打开文件名:=myFolder&“\”&myCSVFile

getBook=ActiveSheet.Name'为什么要另存为xlExcel8(例如文件格式:=56)?对.XLSX(例如xlOpenXMLWorkbook或FileFormat:=51)有限制吗?我可能错了,但您不想要{…文件名:=myfolder&“\”&GetBook2&“.xls”}。谢谢您的快速回复!但是,代码似乎不是在创建Excel文件,而是在删除.CSV文件。代码执行了,结果我没有文件。删除“Kill”行并重新运行后,该文件夹仅包含两个.csv文件。看起来它甚至没有保存Excel文件。思想?再次感谢。
MyFolder=“redact”
不是一个完整的开始路径。它相对于当前目录(不一定是活动工作簿的目录)。它是活动工作簿路径的子文件夹吗?没有理由说明为什么是.xls而不是.xlsx。下面是路径的大致轮廓,名称对其进行了编辑:MyFolder=“L:\Folder\Sub Folder\Sub Folder”我删去了所有不必要的代码,只留下了执行您描述的任务所必需的内容。编辑并将
Environ(“TEMP”)&Chr(92)和“redact”
更改为
L:\Folder\Sub Folder\Sub Folder
。这已在我的%TEMP%文件夹的子文件夹中测试并按预期执行。太棒了。谢谢