向用户指示宏正在 Outlook 中运行的最佳实践是什么?该宏可能需要大约 1-30 秒才能完成。

我想避免在宏运行之前弹出模式“msgbox”,因为这可能很烦人。

如果可能的话,我宁愿避免沙漏光标,并想知道是否有更好的方法。

有没有办法在宏运行时放置非模式“状态”消息?

(我针对当前选定的邮件项目运行的宏 - 它是通过快速访问工具栏上的按钮启动的)。

有帮助吗?

解决方案

本文 (还有这个)最佳实践中表示使用状态栏。

本文 Outlook 上说:

更改状态栏
无法更改Microsoft Outlook中的状态栏文本。状态栏并未像其他Microsoft Office对象模型中那样暴露。

Outlook.com 提供 进度框的代码.

其他提示

的事情串在脑海中,我相信对方也会有想法,以及情侣。

1.Show上有一个进度条,报告进度或在如果不能报告进度劳斯莱斯模式进度条形式 2.Show形式与您最喜爱的动画GIF内(spinny比萨饼等)的图片框。您可以关闭的按钮等。 3.使用Win API来获取与展望居留制酒吧玩

不知道你可能要应对保持形式“上面”和抽水进度异步到它,你正在做的宏是什么。

干杯

马库斯

扩展@76mel的答案,一个很好的方法是使用非模式用户表单。只需一个标签和标题就可以让事情变得非常简单: EG status

我喜欢做的是将用户表单设置为:

  • 非模态(在属性中 F4, , 放 ShowModal 为假)
    • 这意味着您可以在状态栏外部单击,它不会阻止您。
  • 我设置了 StartupPosition0-ManualTopLeft 类似于 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

在用户窗体代码本身中以使其始终保持在顶部

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top