将每个工作表导出到单独的csv文件

Ada*_*lls 5 csv vbscript excel vba excel-vba

我需要通过VBA/VBS脚本以编程方式将所有工作表(总共4个,我知道名称)导出到同一文件夹中名为csv文件的工作表,而无需加载excel并手动运行宏.

理想情况下,脚本会将源文件路径/ filename.xls和导出文件路径作为命令行参数.

我已经阅读了许多Excel VBA脚本,只是在Excel中执行此操作,我看到一些用于加载excel工作簿以导出第一个工作表.但是,当我尝试混合这两个时,我得到了这个错误:

(1,12)预期结束声明

Dim source As Workbook
Set source = Application.Workbooks.Open(WScript.Arguments.Item(0), ReadOnly:=True)
For Each sheet In source.Sheets
.SaveAs Filename:= WScript.Arguments.Item(1) & Source.Sheets.Name, FileFormat:=xlCSV
Next sheet
wb.Close
Run Code Online (Sandbox Code Playgroud)

bre*_*tdj 10

一个运行该代码会是这个样子.

  1. 可以从命令行执行vbs文件
  2. 文件夹名称是多余的,就好像文件存在一样(FSO对象为此测试),然后它所在的文件夹也必须存在
  3. 代码自动化Excel以分隔工作表

与上面的VBA相比,需要注意的两个要点

  • 你不能将vbs对象变暗为字符串,工作簿等(因此你的初始错误).你只能暗他们
  • 您不能使用命名常量,例如xlCSV在vbscript中,因此使用下面的6作为CSV格式

    Dim strFilename  
    Dim objFSO  
    Set objFSO = CreateObject("scripting.filesystemobject")  
    strFilename = "C:\temp\test.xlsx"  
    If objFSO.fileexists(strFilename) Then  
      Call Writefile(strFilename)  
    Else  
      wscript.echo "no such file!"  
    End If  
    Set objFSO = Nothing  
    
    Sub Writefile(ByVal strFilename)  
    Dim objExcel  
    Dim objWB  
    Dim objws  
    
    Set objExcel = CreateObject("Excel.Application")  
    Set objWB = objExcel.Workbooks.Open(strFilename)  
    
    For Each objws In objWB.Sheets  
      objws.Copy  
      objExcel.ActiveWorkbook.SaveAs objWB.Path & "\" & objws.Name & ".csv", 6  
      objExcel.ActiveWorkbook.Close False  
    Next 
    
    objWB.Close False  
    objExcel.Quit  
    Set objExcel = Nothing  
    End Sub  
    
    Run Code Online (Sandbox Code Playgroud)