لا يمكن تحديد مصنف آخر عند فتح مصنف تمكين الماكرو

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

  •  26-12-2019
  •  | 
  •  

سؤال

لدي مصنف تمكين ماكرو يستخدم التعليمات البرمجية لتعيين جهاز توقيت - وهذا هو كتاب مشترك وغالبا ما يكون الناس في الكتاب وترك مكاتبهم الخ.تم ضبطه على الحفظ والإغلاق بعد 30 دقيقة من عدم النشاط.يبدو أن هذه الوظيفة تعمل بشكل جيد ولكن المشكلة أنا على التوالي في أنه عندما يكون لدي المصنفات الأخرى مفتوحة لا أستطيع تحديدها ، إما عن طريق النقر على البلاط (ويندوز 7) أو عن طريق ألت+تبويب ، والطريقة الوحيدة للتحرك هو السيطرة+التحول.إذا كان لي فقط باستخدام المصنف الذي لن يكون مشكلة - لا أحد يعرف لماذا يحدث هذا?كود نشر أدناه:

Private Sub Workbook_Open()
StartTimer
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
StartTimer
End Sub


Const idleTime = 1800 'seconds
Dim Start
Sub StartTimer()
Start = Timer
Do While Timer < Start + idleTime
DoEvents
Loop
Application.DisplayAlerts = False
ActiveWorkbook.Close True
Application.DisplayAlerts = True
End Sub
هل كانت مفيدة؟

المحلول 2

giveacodicetagpre.

نصف معركي يدرك ما يعنيه الناس عن طريق "هذا" أو "ذلك" - قد يكون هذا الرمز مفرطا بعض الشيء ولكن يبدو أنه يعمل.وأنا أقدر أن تأخذ الوقت للمساعدة والحصول علي على المسار الصحيح!

نصائح أخرى

لتبدأ ، لست متأكدا تماما من سبب حصولك على هذا السلوك ، ولكن يرجى الاستمرار في القراءة.I المشتبه به لديها ما تفعله مع الخاص بك مشغول-انتظر حلقة (واحد مع DoEvents) ، ولكن هذا مجرد حدس.قد يكون لدى شخص آخر تفسير (أفضل).

على أي حال ، ربما باستخدام Application.OnTime هو نهج أفضل.يمكنك جدولة عملية تحدث في وقت أو فاصل زمني معين وهناك خيار لإلغاء واستبدال عملية مجدولة مسبقا.ستحتاج إلى هذا المرفق في Workbook_SheetChange معالج الحدث.

باختصار ، يمكنك القيام بما يلي:

  1. إضافة روتين جديد لحفظ والخروج من المصنف ، دعونا نسميها: SaveWorkbookAndExit.سيتم استدعاء هذا من قبل OnTime لاحقا.
  2. استبدال محتويات الخاص بك Workbook_SheetChange معالج الأحداث على النحو التالي:

    Application.OnTime Now + TimeValue("00:30:00"), _
                       "SaveWorkbookAndExit", _
                       Schedule:=False
    

    هذا في الأساس جداول الروتين SaveWorkbookAndExit ليتم استدعاؤها في 30 دقيقة من الآن.لاحظ ال Schedule:=False -- يشير إلى أنه يجب مسح/إلغاء الإجراء المحدد مسبقا ، وهو أمر مهم للغاية.

  3. أيضا إضافة نفس الرمز على النحو الوارد أعلاه إلى الخاص بك Workbook_Open معالج الحدث. على عكس أعلاه ، لاحظ أنه يجب عليك تعيين Schedule:=True هنا!

وهذا كل شيء.عند فتح المصنف ، جديد SaveWorkbookAndExit ومن المقرر العملية.ثم ، في كل مرة تذهب إلى Workbook_SheetChange, ، سيتم إلغاء العملية المجدولة مسبقا وسيتم جدولة عملية جديدة في مكانها.

أنا لم تختبر أي من هذا ، ولكن آمل أن تحصل على هذه الفكرة.واسمحوا لي أن أعرف إذا كنت بحاجة لي لشرح شيء آخر.

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