Outlook VBA ماكرو: أفضل طريقة للإشارة إلى "الرجاء الانتظار"
سؤال
ما هي أفضل الممارسات للإشارة إلى المستخدم بأن الماكرو يعمل داخل 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 غير مشروط. اجعل شيئا بسيطا حقا مع مجرد تسمية ورسمية مثل هذا:
ما أحب القيام به هو الحصول على مجموعة 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 نفسه للحفاظ عليه في الأعلى دائما