【问题标题】:Pass Error Code from a VBA module to the VBScript that executed it将错误代码从 VBA 模块传递到执行它的 VBScript
【发布时间】:2016-04-26 15:17:10
【问题描述】:

如何将第 2 部分中的 VBA 模块中的错误代码成功传递给第 1 部分中执行它的 VBScript?


第 1 部分:执行第 2 部分中的 VBA 的 VBScript

Option Explicit

  Dim xlApp 
  Dim xlBook

  If Err.Number <> 0 Then Err.Clear

  Set xlApp = GetObject("","Excel.Application")
  Set xlBook = xlApp.Workbooks.Open("\\(directory)\(File Name).xlsm", 0, True)
  xlApp.Run "(Macro Name)"
  If Err.Number <> 0 Then
      Msgbox Err.Number & ": " & Err.Description & " The script will now quit."
      WScript.Quit
  Else
      Msgbox Err.Number
  End If
  xlApp.Quit

第 2 部分:执行第 2 部分中的 VBA 的 VBScript

Option Explicit

Sub (MacroName)()

            'Snip - A bunch of working code                

            Err.Number = 7
            Err.Description = "Made up error for testing - delete me"

End Sub

运行此脚本时,测试时 Err.Number 为 0,并且 Msgbox 仅显示 0。我需要做什么才能显示7: Made up error for testing - delete me The script will now quit.

【问题讨论】:

  • 将其作为参数传递?
  • @findwindow 你会和下面 Mat's Mug 的回答类似吗?
  • 我不知道 vbscript。
  • @HuguesPaquetBlanchette 我拒绝了您对excel 标签的建议编辑,但如果您能指出一些元数据,说我们应该使用更广泛的标签以及更窄的标签,我会批准该编辑。我不知道这个话题的元结论是什么。
  • @findwindow 我也不知道!它真的很像 VBA,但没有显式类型,并且它不需要运行 SubFunction 过程,因为它是一个“脚本”。

标签: excel vbscript vba


【解决方案1】:

IntelliSense 没有显示它,但 Application.Run 是一个带有 Variant 返回类型的 Function,所以你可以有这样的宏:

Public Function Test() As Integer
    Test = 42
End Function

然后调试/立即窗格将输出以下内容:

?Application.Run("test")
 42 

使(macro name) 成为一个返回错误号的函数,然后代替这个:

xlApp.Run "(Macro Name)"

你可以这样做:

Dim result
result = xlApp.Run("(Macro Name)")

然后检查result 的值而不是Err.Number 的值。


现在,如果(macro name) 应该被 Excel 调用为 作为宏,将其更改为 Function 将使您的 VBScript 工作,并且打破 Excel 宏。

您可以创建一个“包装器”函数,将宏公开为 Sub 以供 Excel 使用,并从 VBScript 调用包装器函数:

Function VBScriptMacroNameWrapper() As Integer
    On Error Resume Next
    ' run macro sub here
    VBScriptMacroNameWrapper = Err.Number
    On Error GoTo 0
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多