簡體   English   中英

“請等待”彈出消息

[英]“Please Wait” popup message

我試圖在Excel VBA中創建一個Please Wait消息。 這是為了提醒用戶處理SQL查詢,該進程仍在進行中。 我想在userform中顯示此消息。

目前,用戶連接到SQL DB,選擇數據庫和其他一些選項,按下Go ...並且表單不會卸載。 在Go點我有另一個彈出消息Please Wait表單,但是這個表單沒有卸載,即SQL執行命令沒有運行。

我調用Please Wait userform的代碼,包括一個標簽:

   Call WaitShowSQl.ExecuteCall KillWaitCall WaitShow
   SQl.Execute
   Call KillWait

在另一個代碼模塊中,我有:

   Sub WaitShow()
   Wait.Show
   End Sub

   Sub KillWait()
   Unload Wait
   End Sub

我有一個名為wait userform,代碼如下:

Private Sub UserForm_Activate()
Call PleaseWait
End Sub 

Sub PleaseWait()
Wait.Label1.Caption = "Calculating...Please Wait!"
End Sub

現在,在執行代碼時,運行時不會通過模塊返回以執行以下操作:

SQl.ExecuteSQl.Execute

我可以使用狀態欄顯示程序的進度,但userform彈出消息對此程序非常有用。

Form.Show方法的默認行為是將表單顯示為模式對話框。 你正在尋找的是一個無模式對話框,所以你需要指定,如下所示:

Sub WaitShow()
   Wait.Show vbModeLess
End Sub

更新:

如果您無法使用無模式對話框,則還有其他選項,如注釋中所述。 其中一個是讓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

並以主要形式:

Sub WaitShow()
   Wait.Init(the parameters...)
   Wait.Show
   Wait.GetReturns(the results...)
End Sub

另一個選擇是完全跳過Wait表單,而是在mainform上顯示“Waiting”圖像,並在SQL處理完成后隱藏它。

以下是在用戶等待Excel完成處理時顯示進度條的方法:

https://stackoverflow.com/a/10791349/138938

Excel進度條

在您的情況下,您可以猜測查詢的合理“平均”時間,並使用該時間的百分比更新進度條,這將使您的用戶放心Excel正在運行且他們不需要恐慌。

我的解決方案遠沒有其他人那么優雅和令人印象深刻。 僅供參考,我的腳本正在為FOR ... NEXT循環中的許多合作伙伴進行處理,我想要與當前正在處理的合作伙伴一起更新屏幕。

我創建了一個名為“Messages”的工作表選項卡。 我盡可能寬大地擴展了單元格A1,我選擇了一種我喜歡的顏色方案,我喜歡它。 我的腳本首先關閉ScreenUpdating。 然后我

Sheets("Messages").Select
Cells(1, 1).Value = "Processing " & Partner
Application.ScreenUpdating = True
Application.ScreenUpdating = False

在此之后,我回到我需要的任何表格。 沒有什么花哨的,但它快速,簡單,並且做我需要的。 :)

我使用表單上的命令按鈕設置為一個非常小的大小,在表單加載時隱藏,標題為“請稍候,處理......”

我在Iniliatlise事件中調整按鈕的大小(我只需使用top,left,width和height屬性調整表單大小)。 你當然可以做任何你喜歡的尺寸。

我在耗費代碼之前使命令按鈕可見,並在代碼末尾再次隱藏它。

需要一些“DoEvents”,但效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM