Fwa*_*afa 7 excel vba popup excel-vba
我试图Please Wait在Excel VBA中创建一条消息.这是为了提醒用户处理SQL查询,该进程仍在进行中.我想在userform中显示此消息.
目前,用户连接到SQL DB,选择数据库和其他一些选项,按下Go ...并且表单不会卸载.在Go点我有另一个弹出消息的Please Wait表单,但是这个表单没有卸载,即SQL执行命令没有运行.
我调用Please Waituserform的代码,包括标签:
Call WaitShowSQl.ExecuteCall KillWaitCall WaitShow
SQl.Execute
Call KillWait
Run Code Online (Sandbox Code Playgroud)
在另一个代码模块中,我有:
Sub WaitShow()
Wait.Show
End Sub
Sub KillWait()
Unload Wait
End Sub
Run Code Online (Sandbox Code Playgroud)
我wait使用以下代码调用userform :
Private Sub UserForm_Activate()
Call PleaseWait
End Sub
Sub PleaseWait()
Wait.Label1.Caption = "Calculating...Please Wait!"
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,在执行代码时,运行时不会通过模块返回以执行以下操作:
SQl.ExecuteSQl.Execute
Run Code Online (Sandbox Code Playgroud)
我可以使用状态栏显示程序的进度,但userform弹出消息对此程序非常有用.
Form.Show方法的默认行为是将表单显示为模式对话框.你正在寻找的是一个无模式对话框,所以你需要指定,如下所示:
Sub WaitShow()
Wait.Show vbModeLess
End Sub
Run Code Online (Sandbox Code Playgroud)
更新:
如果您无法使用无模式对话框,则还有其他选项,如注释中所述.其中一个是让wait userform执行SQL.这可以这样做:
在等待表单中,首先声明变量
Private mySomeParameter1 As String
Private mySomeReturnValue1 As String
'Input parameters to the form
Public Sub Init(ByVal some_parameter1 As String, ...)
... Initialize your SQL, NOT execute it
End Sub
'Output values from the from
Public Sub GetReturns(ByRef some_return_value1 As String, ...)
... set the output parameters...
End Sub
'Do the work
Private Sub UserForm_Activate()
Call PleaseWait
'Either call DoEvents or a manual Refresh to let the label display itself
Call ExecutSQL ' A function that executes the SQL
Unload Me
End Sub
Run Code Online (Sandbox Code Playgroud)
并以主要形式:
Sub WaitShow()
Wait.Init(the parameters...)
Wait.Show
Wait.GetReturns(the results...)
End Sub
Run Code Online (Sandbox Code Playgroud)
另一个选择是完全跳过Wait表单,而是在mainform上显示"Waiting"图像,并在SQL处理完成后隐藏它.