Pergunta

Qual é a melhor prática para indicar ao usuário que uma macro está sendo executado dentro do Outlook? A macro pode demorar cerca de 1-30 segundos para completar.

Eu quero evitar um modal 'msgbox' aparecendo antes da macro é executado, pois isso pode ser irritante.

Eu preferiria evitar o cursor de ampulheta se possível, e se perguntou se havia uma maneira melhor.

Existe uma maneira de colocar uma mensagem não-modal 'status' para cima, enquanto a macro está em execução?

(A macro Tenho corre contra o MailItem selecionado - e é lançada por um botão na barra de ferramentas de Acesso Rápido)

.
Foi útil?

Solução

Este artigo ( também esta ) sobre as melhores práticas diz usar o status bar.

Este artigo no Outlook diz:

Alterar a Barra de status
Não há forma de alterar o texto da barra de estado Microsoft Outlook. A barra de status é não expostos como no outro modelos de objetos do Microsoft Office.

Outlook.com fornece para uma caixa de progresso .

Outras dicas

Algumas coisas que corda à mente, estou certo de outro terá idéias também.

1.Show um formulário com uma barra de progresso sobre ele que os relatórios de progresso ou tem a barra de progresso no modo marque se você não pode relatar o progresso 2.Show um formulário com uma caixa de imagem com o seu interior gif animado favorito (pizza spinny etc.). Você pode desativar os botões etc. 3. Use vitória api para obter jogo com a barra do Outlook Staus

Não sabendo o que está fazendo em sua macro que você pode ter que lidar com manter a forma “Em cima” e bombeamento progresso assíncrona para ele.

Felicidades

Marcus

Expandindo resposta de @ 76mel, uma boa maneira de fazer isso é com um formulário de usuário não-modal. Faça algo realmente simples, com apenas um rótulo e legenda como este: estado EG

O que eu gostaria de fazer é ter o conjunto userform como:

  • Não modal (em propriedades F4 , conjunto ShowModal para false)
    • Isto significa que você pode clicar fora da barra de status e não impedi-lo.
  • Eu defini o StartupPosition para 0-Manual e Top e Left para algo como 100 de modo que as aparece forma de estado no canto superior esquerdo da tela (fora do caminho de quaisquer outras mensagens que aparecem no centro por padrão)

value Set do rótulo para algum texto padrão para quando as primeiras cargas UserForm

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

Nota, como com Application.Statusbar do Excel você deve redefinir o formulário de usuário para seu valor padrão, se você pretende usá-lo mais tarde, na mesma instância do Excel Opcionalmente usar este demasiado

'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

no próprio código userform para mantê-lo no topo sempre

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top