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
我正在尝试将我嵌入 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