"请等待"弹出消息

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弹出消息对此程序非常有用.

GTG*_*GTG 6

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处理完成后隐藏它.