Frage

Was ist die beste Praxis für den Benutzer zum Anzeigen, dass ein Makro in Outlook ausgeführt wird? Das Makro kann um 1-30 Sekunden dauern.

Ich möchte ein modal ‚msgbox‘ zu vermeiden, bevor der Makro Aufspringen ausgeführt wird, wie dies lästig sein kann.

Ich würde lieber die Sanduhr Cursor, wenn möglich, vermeiden, und fragte mich, ob es ein besserer Weg war.

Gibt es eine Möglichkeit, eine nicht-modal ‚Status‘ Nachricht des Vergebens oben, während das Makro ausgeführt wird?

(Die Makro Ich habe läuft gegen die aktuell ausgewählten MailItem - und durch eine Taste auf der Schnellstartleiste gestartet).

War es hilfreich?

Lösung

dieser Artikel ( auch diese ) auf best Practice sagt die Statusleiste verwenden.

Dieser Artikel auf Outlook sagt:

  

Ändern der Statusleiste
  Es gibt kein   Art und Weise der Statusleiste Text zu ändern, in   Microsoft Outlook. Die Statusleiste ist   nicht ausgesetzt, wie es in anderen ist   Microsoft Office-Objektmodelle.

Outlook.com bietet Code für einen Fortschritt Box .

Andere Tipps

Ein paar Dinge, die Zeichenfolge in dem Sinne, ich bin sicher, andere werden Ideen auch.

1.Show eine Form mit einem Fortschrittsbalken auf, dass Fortschrittsberichte oder die Fortschrittsbalken in marque Modus, wenn Sie keine Fortschritte berichten können 2.Show ein Formular mit einem Bildfeld mit Ihrem Lieblings animierte GIF innen (spinny Pizza etc.). Sie können die Tasten ausschalten usw. 3. Verwenden Sie api gewinnen mit dem Ausblick staus bar zu erhalten spielen

Nicht zu wissen, was Sie in Ihrem Makro tun Sie mit dem Halten Sie das Formular „On top“ zu tun haben kann und Pump async Fortschritt hinein.

Prost

Marcus

Als Erweiterung @ 76mel Antwort, eine schöne Art und Weise, dies zu tun ist mit einer nicht-modalen Userform. Machen Sie etwas wirklich einfach mit nur einem Etikett und einem Titel wie folgt aus:

Was ich tun möchte, ist hat die Userform gesetzt, wie:

  • Nicht modal (in Eigenschaften F4 , setzen ShowModal auf false)
    • Das heißt, Sie außerhalb der Statusleiste klicken und es ist nicht zu stoppen.
  • stelle ich die StartupPosition 0-Manual und Top und Left so etwas wie 100, so dass die Status-Form in der oberen linken Ecke des Bildschirms angezeigt wird (aus dem Weg von anderen Nachrichten, die in der Mitte standardmäßig angezeigt)

Stellen Sie die value des Labels zu einem gewissen Standardtext, wenn die Userform lädt zunächst

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

Beachten Sie, wie mit Excel Application.Statusbar müssen Sie die Userform auf den Standardwert zurückgesetzt, wenn Sie es verwenden später in der gleichen Instanz von Excel planen Optional diese nutzen

'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

in der Userform Code selbst es an der Spitze zu halten immer

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top