gpt4 book ai didi

vba - UserForm 中的 Application.Quit 尝试在退出前运行宏的其余部分

转载 作者:行者123 更新时间:2023-12-04 21:05:03 27 4
gpt4 key购买 nike

我的问题是:在 Excel 2013 中使用 VBA 当用户决定不想填写用户表单并单击退出或取消时,如何优雅地关闭整个 Excel 实例?

目前,如果用户单击退出或取消,我会检查我的实例是否是唯一打开的实例。如果不是,我可以使用 ThisWorkbook.Close,我想我会没事的。但是,如果是,我不希望应用程序仍然存在,所以我使用了 Application.Quit。但是,这会尝试完成宏的运行,引发错误(最初是“类型不匹配”,因为我卸载了表单),并且仅在单击“调试”或“结束”后才关闭(对于我实际上无法做到的速度如此之快)调试)。我暂时忽略第一种情况,只是试图退出整个应用程序。这是一个很长的宏,有很多子程序和函数,所以为了调试和发帖,我把它缩短了。类型不匹配错误不再发生,但我相信这是实际错误的结果:在关闭应用程序的命令之后运行的代码被调用。

首先,这是启动一切的代码:

Private Sub CommandButton1_Click()

Call form_variables
frm_REQUEST.Show
Call a_REQUEST_main

End Sub

子程序
form_variables

是一个创建公共(public)变量的子例程,因此我可以存储来自用户窗体的数据。
frm_REQUEST.Show

初始化(包括调用查找另一个工作簿、提取列表、进行一些格式化、关闭工作簿并将列表输入到用户窗体下拉框中的函数)并显示表单,最后
a_REQUEST_main

使用公共(public)变量(存储用户窗体数据的地方)并做它的事情(但如果用户窗体关闭,不应该做任何事情)。

调用 .Show 时执行的代码是:
Private Sub UserForm_Initialize()

' Get job numbers from other workbook
Dim job_selection_list As Variant
job_selection_list = get_job_list()

With frm_REQUEST.Job_Number_ComboBox
.List = job_selection_list
End With

' set focus on Job Numbers
JN_combobox.SetFocus

End Sub

Private Sub cancel_button_Click()

Set job_selection_list = Nothing

Unload Me

Application.Quit

End Sub


Private Sub submit_button_Click()

' Values from userform saved as global (?) variables so other subroutines can access.

End Sub

我逐步浏览了该程序并看到,一旦在 UserForm 中调用 Application.Quit,在主子例程中的宏就会执行
Call a_REQUEST_main

但它真的应该关闭一切。我尝试执行“保存”命令,并更改事物的顺序,并阅读需要设置为空的对象(因此在初始化下拉列表时创建的 job_selection_list 的设置),但我似乎无法得到这可以工作,或者在网上找到任何东西。谁能提供一些指导或让我知道关闭excel实例的更好方法?帮助我 Stack-Overflow Kenobi,你是我唯一的希望!

谢谢。

最佳答案

只需添加一个变量来说明用户何时关闭表单

在表格中

'hold flag if users cancels form
Public btnCancel As Boolean
Private Sub CommandButton1_Click()
Unload Me
btnCancel = True
End Sub

'set the flag each time the form active
Private Sub UserForm_Activate()
btnCancel = False
End Sub

然后在你的代码中
Call form_variables
frm_REQUEST.Show

If frm_REQUEST.btnCancel Then
Application.Quit
Else
Call a_REQUEST_main
End If

关于vba - UserForm 中的 Application.Quit 尝试在退出前运行宏的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com