문제

매크로가 Outlook 내에서 실행되고 있음을 사용자에게 표시하는 모범 사례는 무엇입니까? 매크로는 완료하는 데 약 1-30 초가 걸릴 수 있습니다.

매크로가 실행되기 전에 모달 'msgbox'가 나타나는 것을 피하고 싶습니다.

가능하다면 모래 시계 커서를 피하고 더 나은 방법이 있는지 궁금해했습니다.

매크로가 실행되는 동안 비 모달 '상태'메시지를 올리는 방법이 있습니까?

(매크로 I는 현재 선택된 MailItem에 대해 실행되었으며 빠른 액세스 도구 모음의 버튼으로 시작했습니다).

도움이 되었습니까?

해결책

이 기사 (또한 이것) 모범 사례에 따르면 상태 표시 줄을 사용하십시오.

이 기사 Outlook에서 :

상태 표시 줄 변경
Microsoft Outlook에서 상태 표시 줄 텍스트를 변경할 방법은 없습니다. 상태 표시 줄은 다른 Microsoft Office 객체 모델과 마찬가지로 노출되지 않습니다.

Outlook.com 제공 진행 상자 코드.

다른 팁

그 두 가지가 떠오르는 것, 나는 다른 사람도 아이디어를 가질 것이라고 확신합니다.

1. 진행률 표시 줄이있는 양식을 보여주십시오. 진행 상황을보고하거나 진행 상황을보고 할 수없는 경우 Marque 모드로 진행률 표시 줄이 있습니다. . 버튼 등을 끌 수 있습니다. 3. Win API를 사용하여 Outlook Staus Bar를 플레이하십시오.

매크로에서 무엇을하고 있는지 알지 못하면 양식을“맨 위에”유지하고 비동기 진행 상황을 펌핑하는 데 다루어야 할 수도 있습니다.

건배

마커스

@76mel의 답변을 확장하면이를 수행하는 좋은 방법은 비 모달 사용자 형식입니다. 다음과 같은 라벨과 캡션으로 정말 간단한 것을 만드십시오. EG status

내가 좋아하는 것은 userform 세트를 다음과 같은 것입니다.

  • 비 모달 (속성 F4, 세트 ShowModal 거짓으로)
    • 즉, 상태 표시 줄 밖에서 클릭 할 수 있으며 멈추지 않습니다.
  • 나는 그것을 설정했다 StartupPosition 에게 0-Manual 그리고 Top 그리고 Left 상태 양식이 화면의 왼쪽 상단에 나타나도록 100과 같은 것입니다 (기본적으로 중앙에 나타나는 다른 메시지의 방향으로)

라벨을 설정하십시오 value 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

Excel과 마찬가지로 참고하십시오 Application.Statusbar 나중에 Excel의 동일한 인스턴스에서 사용하려는 경우 userform을 기본값으로 재설정해야합니다.

'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