TOP

VBA-الدرس 11.1. أحداث المصنف (أحداث Workbook)

يمكن أن يكون لدينا أحداث المصنف (مثل الفتح والإغلاق وما إلى ذلك) التي يمكن أن تكون مشغلات (رموز تبديل) لكود VBA.


Workbook_Open (فتح الكتاب)

لاتباع الإرشادات عند فتح المصنف ، انتقل إلى ThisWorkbook وحدد Workbook:

ستتم إضافة الحدث Workbook_Open افتراضيًا وسيتم تنشيطه عند فتح المصنف:

Private Sub Workbook_Open()

End Sub

على سبيل المثال ، إذا أضفنا التعليمات التالية ، فسيتم عرض مربع الحوار عند فتح المصنف:

Private Sub Workbook_Open()
     MsgBox "Welcome"
End Sub

Workbook_BeforeClose (حدث قبل إغلاق المصنف)

لتنفيذ الإرشادات قبل إغلاق المصنف ، حدد قبل الإغلاق:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

يمكن إلغاء إغلاق المصنف عن طريق تعيين المتغير "Cancel" إلى True.

فيما يلي مثال يُطلب فيه من المستخدم التأكيد لإغلاق المصنف:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
     'إذا استجاب المستخدم بـ NO ، فسيكون للمتغير Cancel القيمة TRUE (والتي ستلغي إغلاق المصنف)
     If MsgBox("Do you really want to close this workbook ?", 36, "I confirm") = vbNo Then
         Cancel = True
     End If
End Sub

Workbook_BeforeSave (حدث قبل حفظ المصنف)

يقع هذا الحدث مباشرة قبل حفظ المصنف:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

يمكن إلغاء حفظ الملف عن طريق ضبط المتغير "Cancel" على True.

Workbook_BeforePrint (حدث قبل طباعة الكتاب)

يقع هذا الحدث قبل طباعة المصنف:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub

يمكن إلغاء طباعة الملف عن طريق ضبط المتغير "Cancel" على True.

Workbook_AfterSave (حدث بعد حفظ المصنف)

يقع هذا الحدث مباشرة بعد حفظ المصنف:

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

End Sub

Workbook_SheetActivate (حدث تبديل ورقة العمل)

يقع هذا الحدث في كل مرة تقوم فيها بالتبديل بين أوراق العمل في مصنف:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

في هذا المثال ، يتم عرض اسم الورقة النشطة في مربع الحوار:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
     MsgBox "Name of Sheet : " & Sh.Name
End Sub

Workbook_SheetBeforeDoubleClick (انقر نقرًا مزدوجًا فوق حدث في خلية)

يحدث هذا الحدث عندما يتم النقر نقرًا مزدوجًا فوق خلية ورقة عمل:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub

على سبيل المثال ، يمكننا استخدام هذا الحدث لإضافة لون تعبئة خلية ، اعتمادًا على الورقة المحددة:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     If Sh.Name = "Sheet1" Then
         Target.Interior.Color = RGB(255, 108, 0) 'لون برتقالي
     Else
         Target.Interior.Color = RGB(136, 255, 0) 'اللون الاخضر
     End If
End Sub

Workbook_SheetBeforeRightClick (الحدث قبل النقر بزر الماوس الأيمن)

يقع هذا الحدث قبل النقر بزر الماوس الأيمن على نفسه:

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub

Workbook_SheetChange (حدث تغيير محتوى الورقة)

يقع هذا الحدث عندما يتغير محتوى ورقة العمل:

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

End Sub

Workbook_SheetCalculate (حدث SheetCalculate)

يحدث هذا الحدث عندما يتم حساب البيانات الموجودة في ورقة العمل أو إعادة حسابها:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

End Sub

Workbook_SheetSelectionChange (حدث تغيير نطاق الخلايا المحدد)

يقع هذا الحدث عندما يتغير محتوى النطاق المحدد من الخلايا في جدول البيانات:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

End Sub

في هذا المثال ، يتغير لون التعبئة إذا كانت الخلية A1 فارغة:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     If Range("A1") = "" Then
         Target.Interior.Color = RGB(124, 255, 255) 'اللون الأزرق
    End If
End Sub

Workbook_NewSheet (إضافة حدث ورقة جديدة)

يقع هذا الحدث عند إضافة ورقة جديدة إلى المصنف:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub

Workbook_SheetFollowHyperlink (ارتباط النقر فوق الحدث)

يحدث هذا الحدث عند النقر فوق ارتباط (نص تشعبي):

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)

End Sub