向用戶指示宏在Outlook中運行的最佳做法是什麼? 該宏可能需要大約1-30秒才能完成。Outlook VBA宏:指示'請稍等'的最佳方式
我想避免在運行宏之前彈出一個模式'msgbox',因爲這可能很煩人。
我寧願避免沙漏光標,如果可能的話,並想知道是否有更好的方法。
在宏運行時,是否有一種方法可以將非模態「狀態」消息向上放置?
(我已經對當前選定的mailItem運行的宏 - 它通過快速訪問工具欄上的按鈕啓動)。
向用戶指示宏在Outlook中運行的最佳做法是什麼? 該宏可能需要大約1-30秒才能完成。Outlook VBA宏:指示'請稍等'的最佳方式
我想避免在運行宏之前彈出一個模式'msgbox',因爲這可能很煩人。
我寧願避免沙漏光標,如果可能的話,並想知道是否有更好的方法。
在宏運行時,是否有一種方法可以將非模態「狀態」消息向上放置?
(我已經對當前選定的mailItem運行的宏 - 它通過快速訪問工具欄上的按鈕啓動)。
This article(also this)最佳做法表示使用狀態欄。
This article上展望說:
更改狀態欄
沒有改變 Microsoft Outlook中的狀態欄文字 方式。狀態欄是 未公開,因爲它在其他 Microsoft Office對象模型中。
Outlook.com提供code for a progress box。
幾個字符串的思想,我相信其他人也會有想法。
1.如果您無法上報進度,請在進度條上顯示進度條或報告進度條的進度條 2.使用帶有您最喜愛的動畫gif的圖片框菠菜披薩等)。您可以關閉按鈕等。 3.使用win api與outlook staus一起玩
不知道你在宏中做什麼,你可能不得不處理保持窗體「在頂部」並抽水異步進展。
乾杯
馬庫斯
擴展@ 76mel的答案,一個很好的方法是使用非模態用戶窗體。使事情只是一個標籤和標題像這樣很簡單:
我喜歡做的是有用戶窗體設置爲:
ShowModal
爲false)
StartupPosition
到0-Manual
和Top
和Left
爲類似100這樣的狀態的形式出現在屏幕的左上角(出任何其他消息,其默認出現在中心的方式)設置標籤的value
一些默認的文本時,用戶窗體首次加載
Public strStatus As String
Public Const defaultStatus As String = "Default status text" 'set this to whatever you want
Sub statusReporter()
frmStatus.Show
'''
'Your code here
'''
frmStatus.lblStatus = "Step 1"
'...
frmStatus.lblStatus = "Step 2"
'...
'''
'Unload the form
'''
frmStatus.lblStatus = defaultStatus
frmStatus.Hide
End Sub
注意,像Excel的Application.Statusbar
你必須,如果你打算以後使用它的Excel 相同的實例在用戶窗體代碼本身可以選擇使用這個太
'Written By RobDog888 - VB/Office Guru™
'Add a Command Button so you can toggle the userform's topmost effect
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (_
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "user32" (_
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private mlHwnd As Long
Private Sub UserForm_Initialize()
Dim overTim As Single
overTim = Timer
mlHwnd = FindWindow("ThunderDFrame", "Status") 'Change "Status" to match your userforms caption
Do While mlHwnd = 0 And Timer - overTim < 5
mlHwnd = FindWindow("ThunderDFrame", "Status")
DoEvents
Loop
'Set topmost
SetWindowPos mlHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub
,以保持它的頂部始終
用戶窗體重置爲默認值Remou,你是正確的狀態欄沒有通過OOM暴露,但你可以使用Win Api來操縱它。 – 76mel 2010-02-06 13:02:48