Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何停止应用程序后仍运行的Excel宏。退出方法_Vba_Excel - Fatal编程技术网

Vba 如何停止应用程序后仍运行的Excel宏。退出方法

Vba 如何停止应用程序后仍运行的Excel宏。退出方法,vba,excel,Vba,Excel,我发现了类似的问题,但对于其他问题,似乎Excel是从另一个应用程序调用的,在Excel应用程序关闭后,进程将被保留 在我的例子中,Excel文件中有一个宏,当出现错误时,我会尝试关闭应用程序 我的错误处理设置如下: 'Code code code CleanExit: Logger.LogData LOG_DEBUG, MODULE_NAME, "Initialize", "Some module initialized!" Exit Func

我发现了类似的问题,但对于其他问题,似乎Excel是从另一个应用程序调用的,在Excel应用程序关闭后,进程将被保留

在我的例子中,Excel文件中有一个宏,当出现错误时,我会尝试关闭应用程序

我的错误处理设置如下:

'Code code code

        CleanExit:
        Logger.LogData LOG_DEBUG, MODULE_NAME, "Initialize", "Some module initialized!"
        Exit Function

    ErrorExit:
        Logger.LogData LOG_ERROR, MODULE_NAME, "Initialize", "Error found! Description: " & err.description
        Main.HandleError err, MODULE_NAME, "Initialize"
        GoTo CleanExit

End function
Public Function HandleError(ByRef err As ErrObject, ByVal moduleOrgin As String, ByVal methodOrgin As String)

    Dim wbk As Workbook

    'Do something if module origin meets my parameters and exit function right here if my conditions are met

    MsgBox "Some message to the user about the problem"

    If GetSetting(SETTING_HIDE_APPLICATION, False) = True Then
        For Each wbk In addinWorkbook.Application.Workbooks
            wbk.Saved = True
        Next wbk

        addinWorkbook.Application.Quit
    End If

End Function
我希望宏在某个模块中发生错误时停止运行,而在另一个模块中不停止运行(因此转到CleanExit)

错误处理程序的设置方式如下:

'Code code code

        CleanExit:
        Logger.LogData LOG_DEBUG, MODULE_NAME, "Initialize", "Some module initialized!"
        Exit Function

    ErrorExit:
        Logger.LogData LOG_ERROR, MODULE_NAME, "Initialize", "Error found! Description: " & err.description
        Main.HandleError err, MODULE_NAME, "Initialize"
        GoTo CleanExit

End function
Public Function HandleError(ByRef err As ErrObject, ByVal moduleOrgin As String, ByVal methodOrgin As String)

    Dim wbk As Workbook

    'Do something if module origin meets my parameters and exit function right here if my conditions are met

    MsgBox "Some message to the user about the problem"

    If GetSetting(SETTING_HIDE_APPLICATION, False) = True Then
        For Each wbk In addinWorkbook.Application.Workbooks
            wbk.Saved = True
        Next wbk

        addinWorkbook.Application.Quit
    End If

End Function
此代码运行后,我假设所有进一步运行的代码都会停止,因为承载宏代码的Excel工作簿已随应用程序关闭

实际上,我得到了一系列错误,错误消息显示了3次,直到它完全关闭如何避免在应用程序之后运行任何代码。退出方法?

在发生错误时对工作流进行编码,以及在应用程序之后运行什么。退出:

  • 初始化我的窗体的主方法
  • 调用引发错误的装入器方法(应用程序应在此处退出)
  • 加载程序方法完成后,主方法继续
  • 从main方法调用后续方法,该方法也会抛出错误(因为第一个加载程序失败)
  • 最后,我的主方法抛出了一个错误
  • 我总共收到3个带有错误说明的MSGBox

    我必须注意,我在所有方法中使用相同的错误处理过程,但我希望代码停止执行,这样进一步的代码不会触发任何错误。

    如何避免代码在
    应用程序之后运行。退出
    方法


    如果要停止所有操作,请在
    应用程序之后写入
    结束
    。退出
    。它会停止VBA的每一部分,并终止您分配的所有变量这被认为是一种不好的做法(一点也不!),但它会完全按照您的意愿工作。

    当您想要优雅地退出时,这确实是一种(非常!!!)不好的做法,但它会起作用。OP应该考虑另一种方法。1的答案。@RikSportel-很高兴看到有人仍然关心VBA中的高质量代码。上周,当三个人试图说服我SQL注入是完全可以接受的时候,我考虑了一下转换技术。。。(再次开始研究Python):)@Vityata VBA实际上是一个非常完整的开发环境。如果使用VisualStudio(C#或vb.net)不是一个选项,那么它是一个非常强大的选择。从这个意义上讲,在VBA中使用一般的良好实践并不是一种奢侈。将其标记为“宏脚本语言”只意味着不知道VBA是什么,也不知道它可以做什么。:)