Outlook VBA 宏:表示“请稍候”的最佳方式
题
向用户指示宏正在 Outlook 中运行的最佳实践是什么?该宏可能需要大约 1-30 秒才能完成。
我想避免在宏运行之前弹出模式“msgbox”,因为这可能很烦人。
如果可能的话,我宁愿避免沙漏光标,并想知道是否有更好的方法。
有没有办法在宏运行时放置非模式“状态”消息?
(我针对当前选定的邮件项目运行的宏 - 它是通过快速访问工具栏上的按钮启动的)。
其他提示
的事情串在脑海中,我相信对方也会有想法,以及情侣。
1.Show上有一个进度条,报告进度或在如果不能报告进度劳斯莱斯模式进度条形式 2.Show形式与您最喜爱的动画GIF内(spinny比萨饼等)的图片框。您可以关闭的按钮等。 3.使用Win API来获取与展望居留制酒吧玩
不知道你可能要应对保持形式“上面”和抽水进度异步到它,你正在做的宏是什么。
干杯
马库斯
扩展@76mel的答案,一个很好的方法是使用非模式用户表单。只需一个标签和标题就可以让事情变得非常简单:
我喜欢做的是将用户表单设置为:
- 非模态(在属性中 F4, , 放
ShowModal
为假)- 这意味着您可以在状态栏外部单击,它不会阻止您。
- 我设置了
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
在用户窗体代码本身中以使其始终保持在顶部
不隶属于 StackOverflow