Outlook VBA ماكرو: أفضل طريقة للإشارة إلى "الرجاء الانتظار"

StackOverflow https://stackoverflow.com/questions/2211642

  •  18-09-2019
  •  | 
  •  

سؤال

ما هي أفضل الممارسات للإشارة إلى المستخدم بأن الماكرو يعمل داخل Outlook؟ يمكن أن يستغرق الماكرو حوالي 1-30 ثانية لإكماله.

أريد أن تجنب ظهر "msgbox" modal قبل تشغيل الماكرو، لأن هذا يمكن أن يكون مزعجا.

أفضل تجنب المؤشر الرملية إن أمكن، وتساءل عما إذا كانت هناك طريقة أفضل.

هل هناك طريقة لوضع رسالة غير مشروطة "الحالة"، في حين أن الماكرو قيد التشغيل؟

(الماكرو الذي أعمله مقابل MailItem المحدد حاليا - أطلقته زر على شريط أدوات الوصول السريع).

هل كانت مفيدة؟

المحلول

هذه المقالة (هذا ايضا) يقول أفضل الممارسات استخدام شريط الحالة.

هذه المقالة على Outlook يقول:

تغيير شريط الحالة
لا توجد طريقة لتغيير نص شريط الحالة في Microsoft Outlook. لا يتعرض شريط الحالة لأنه في نماذج كائنات Microsoft Office الأخرى.

يوفر Outlook.com رمز مربع التقدم.

نصائح أخرى

زوجين من الأشياء التي تفيد إلى الذهن، أنا متأكد من أن الآخرين سيكون لديهم أفكار كذلك.

1. قم بتشكيل نموذج مع شريط التقدم الذي تقارير التقارير أو لديه شريط التقدم في وضع حائز إذا كنت لا تستطيع الإبلاغ عن التقدم المحرز 2.Show نموذجا مع مربع صورة مع GIF المتحركة المفضلة لديك في الداخل (بيتزا سباحة، إلخ) وبعد يمكنك إيقاف تشغيل الأزرار وما إلى ذلك. 3. استخدم Win API للحصول على اللعب باستخدام شريط Staus Outlook

عدم معرفة ما تفعله في الماكرو الخاص بك قد تضطر إلى التعامل مع الحفاظ على النموذج "في الأعلى" وضخ تقدم ASYNC في ذلك.

هتافات

ماركوس

التوسع في إجابة @ 76mel، وسيلة لطيفة للقيام بذلك هي مع Userform غير مشروط. اجعل شيئا بسيطا حقا مع مجرد تسمية ورسمية مثل هذا: EG status

ما أحب القيام به هو الحصول على مجموعة UserForm كما:

  • غير مشروط (في العقارات F4., ، تعيين ShowModal إلى خطأ)
    • هذا يعني أنه يمكنك النقر خارج شريط الحالة ولا يمنعك.
  • أنا وضعت StartupPosition ل 0-Manual و Top و Left إلى شيء مثل 100 حتى يظهر نموذج الحالة في الركن الأيسر العلوي من الشاشة (من أي رسائل أخرى تظهر في Center افتراضيا)

تعيين التسمية 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 يجب إعادة تعيين UserForm إلى القيمة الافتراضية إذا كنت تخطط لاستخدامه لاحقا في نفس مثيل 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

في رمز UserForm نفسه للحفاظ عليه في الأعلى دائما

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top