任务:客户有Azure SQL服务器,需要导出一个表,抓取4列,将0更改为1,以CSV格式保存到特定位置,然后上传到第3方站点。 上传部分是一个单独的任务,但工作完美。
创建完成工作所需的宏,并在手动运行时完成所需的一切。 调整为完成后关闭 Excel。 因此,将其自动化。
使用此处找到的非常常见的 VBS 脚本,更改变量,将其保存为 VBS 文件,当它运行时,我发现下面出现错误,并且它将原始文件保存在宏 CSV 文件位置中。
脚本错误图像 第 19 行:'执行宏代码 第 20 行:ExcelApp.Run MacroPath
决定尝试任务调度程序,如示例所示。 看起来它会起作用,但如果电脑重新启动,它会运行一次,让 Excel 保持打开状态,最终崩溃
所以我想获得有关修复/改进的建议,希望我能理解并遵循
结束语: 在 Excel 中手动运行宏,每次都能完美运行,甚至在完成后关闭 Excel。
手动运行 ExcelRun.bat 文件,会出现引用 ExcelApp.Run MacroPath 的错误,使 Excel 继续运行,并阻止下一次尝试,因为文件设置为只读。
运行 TimeClockScript.vbs 文件,结果与上述结果相同。
我有3种方法来运行它,越手动,越成功。
我已经阅读这个网站好几天了,你们都先进得多,这些东西只是让你的头脑滚动,每个人都明白,但我,不,我不太明白什么不起作用和/或为什么.
ExcelRun.bat
wscript.exe "C:\245942-1\Excel Run File\TimeClockScript.vbs"
TimeClockScript.vbs
'Input Excel File's Full Path
ExcelFilePath = "C:\245942-1\Excel Run File\smWorkOrders.xlsm"
'Input Module/Macro name within the Excel File
MacroPath = "Module1.CopyColumnsToNewSheet"
'Create an instance of Excel
Set ExcelApp = CreateObject("Excel.Application")
'Do you want this Excel instance to be visible?
ExcelApp.Visible = True 'or "False"
'Prevent any App Launch Alerts (ie Update External Links)
ExcelApp.DisplayAlerts = False
'Open Excel File
Set wb = ExcelApp.Workbooks.Open(ExcelFilePath)
'Execute Macro Code
ExcelApp.Run MacroPath
'Save Excel File (if applicable)
wb.Save
'Reset Display Alerts Before Closing
ExcelApp.DisplayAlerts = True
'Close Excel File
wb.Close
'End instance of Excel
ExcelApp.Quit
Excel 宏 - CopyColumnsToNewSheet
Sub CopyColumnsToNewSheet()
'
' CopyColumnsToNewSheet Macro
'
'
' Refreshing table
Range("A2").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Columns("QI:QI").Select
Range("QI:QI,C:C,F:F").Select
Range("SMWorkOrder[[#Headers],[ServiceSite]]").Activate
ActiveWindow.LargeScroll ToRight:=1
Range("QI:QI,C:C,F:F,S:S").Select
Range("SMWorkOrder[[#Headers],[WOStatus]]").Activate
Selection.Copy
ActiveWindow.ScrollColumn = 1
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ChDir "C:\245942-1\files\CostCodes"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= _
"C:\245942-1\files\CostCodes\CostCodes.csv", FileFormat:=xlCSVUTF8, _
CreateBackup:=False
Application.DisplayAlerts = True
Columns("C:C").Select
Selection.Copy
Selection.Insert Shift:=xlToRight
Range("C1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Column3"
Columns("C:C").Select
Selection.Replace What:="1", Replacement:="A", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Selection.Replace What:="0", Replacement:="1", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Selection.Replace What:="A", Replacement:="0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
ActiveWorkbook.Save
ActiveWindow.Close
ActiveWorkbook.Save
ThisWorkbook.Saved = True
End Sub
错误代码 800A9C68 通常表示“未知运行时错误”,可能由于 VBS 脚本语法问题或指定宏路径问题而发生。
确保宏名称“Module1.CopyColumnsToNewSheet”正确。它应该与 Excel 中的宏名称完全匹配。尝试直接在 Excel 中运行宏,以确认
CopyColumnsToNewSheet
执行时没有错误。
完全限定宏路径:
ExcelApp.Run "'" & wb.Name & "'!Module1.CopyColumnsToNewSheet"
如果 Excel 工作簿已被其他进程打开或因上次运行失败而保持打开状态,则脚本可能会遇到问题。关闭所有 Excel 实例或重新启动系统以确保没有打开的文件。 错误处理:
向VBS脚本添加错误处理以捕获和打印错误:
On Error Resume Next
ExcelApp.Run MacroPath
If Err.Number <> 0 Then
MsgBox "Error running macro: " & Err.Description
Err.Clear
End If
On Error GoTo 0