VBS 运行宏 - VBS 错误,使 Excel 保持打开状态,导致 PC 崩溃

问题描述 投票:0回答:1

任务:客户有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
excel vba
1个回答
0
投票

错误代码 800A9C68 通常表示“未知运行时错误”,可能由于 VBS 脚本语法问题或指定宏路径问题而发生。

  1. 确保宏名称“Module1.CopyColumnsToNewSheet”正确。它应该与 Excel 中的宏名称完全匹配。尝试直接在 Excel 中运行宏,以确认

    CopyColumnsToNewSheet
    执行时没有错误。

  2. 完全限定宏路径:

    ExcelApp.Run "'" & wb.Name & "'!Module1.CopyColumnsToNewSheet"

  3. 如果 Excel 工作簿已被其他进程打开或因上次运行失败而保持打开状态,则脚本可能会遇到问题。关闭所有 Excel 实例或重新启动系统以确保没有打开的文件。 错误处理:

  4. 向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
© www.soinside.com 2019 - 2024. All rights reserved.