VBA 到 ActiveWorkbook 的 VBS

VBA to VBS for ActiveWorkbook

我正在尝试将我嵌入 Excel 电子表格中的一些 VBA 代码转换为将所有选项卡另存为 CSV 的 VBS 脚本,我可以从命令行 运行做同样的事情。

Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
Dim worksheetCount
workSheetCount = oExcel.Worksheets.Count
oExcel.DisplayAlerts = False
Dim counter
Dim currentWorkSheet
For counter = 1 to workSheetCount
    Set currentWorkSheet = oBook.Worksheets(counter)
    currentWorkSheet.Copy
    oExcel.ActiveWorkbook.SaveAs oBook & "-" & currentWorkSheet.Name & ".csv", 6
    oExcel.ActiveWorkbook.Close False
    ThisWorkbook.Activate
Next    
oExcel.DisplayAlerts = True
oBook.Close False
oExcel.Quit

错误发生在第 "oExcel.ActiveWorkbook.SaveAs" 行的开头,表示对象不支持此方法。所以我假设 Excel 对象没有 ActiveWorkbook 方法?这里有 VBA->VBS 转换,我应该使用其他方法吗?

编辑

现在对我有用:

Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

Dim strCurDir
strCurDir = WshShell.CurrentDirectory & "\" & oBook.Name & "-"

Dim worksheetCount
workSheetCount = oExcel.Worksheets.Count

oExcel.DisplayAlerts = False

Dim counter
Dim currentWorkSheet
For counter = 1 to workSheetCount
    Set currentWorkSheet = oBook.Worksheets(counter)
    currentWorkSheet.Copy
    oExcel.ActiveWorkbook.SaveAs strCurDir & currentWorkSheet.Name & ".csv", 6
    oExcel.ActiveWorkbook.Close False
Next

oExcel.DisplayAlerts = True
oBook.Close False
oExcel.Quit

问题不在于 ActiveWorkbook。问题是您没有指定完整路径。

指定路径即可。例如

oExcel.ActiveWorkbook.SaveAs "C:\MyFolder\" & _
oBook.Name & "-" & currentWorkSheet.Name & ".csv", 6

您将在 ThisWorkbook.Activate 收到下一个错误。完全限定它,它将起作用。

提示

您可能想要删除文件扩展名然后保存文件 ;) 类似这样

oExcel.ActiveWorkbook.SaveAs "C:\MyFolder\" & _
Left(oBook.Name, (InStrRev(oBook.Name, ".", -1, vbTextCompare) - 1)) & _
"-" & currentWorkSheet.Name & ".csv", 6

使用索引号引用工作表,或对每个循环执行一次,其中每个项目为 each wksh in workbook.worksheets
另外,我将 worksheet.close 方法移到了 for 循环之后,因为它会在您完成之前关闭您的工作簿

Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
Dim worksheetCount
workSheetCount = oExcel.Worksheets.Count
oExcel.DisplayAlerts = False
Dim counter
Dim currentWorkSheet
For counter = 1 to workSheetCount
Set currentWorkSheet = oBook.Worksheets(counter)
    currentWorkSheet.Copy
    oExcel.Worksheets(counter).SaveAs oBook & "-" & currentWorkSheet.Name & ".csv", 6
    'ThisWorkbook.Activate
Next
oExcel.Worksheets(counter).Close False
oExcel.DisplayAlerts = True
oBook.Close False
oExcel.Quit