התקשרו אלינו: 052-2928949
ימים א'-ה' בין השעות 9:00-17:00

התקשרו אלינו: 052-2928949 א-ה 9:00-17:00

מאקרו אירוע Worksheet_Change: דוגמאות

VBA Tip

מאקרו אירוע Worksheet_Change: דוגמאות

VBA Tip

כיצד נבחר את האירועים שיפעילו את המאקרו?

במאמר הקודם למדנו כיצד להוסיף מאקרו אירוע (Event Macro) מסוג Worksheet_Change.

במאמר הזה אציג דוגמאות לבחירת הטווחים שיפעילו את האירוע:

כיצד להריץ מאקרו, אם השינוי נעשה בעמודה A:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Debug.Print Target
End If
End Sub

הסבר: מספרה של עמודה A הוא 1 ולכן אנחנו בודקים האם העמודה של ה TARGET, כלומר, העמודה של התא שהפעיל את השינוי, היא 1

הרצת מאקרו אם השינוי נעשה באחת משלוש העמודות הראשונות:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 4 Then
Debug.Print Target
End If
End Sub

הסבר: אנו מבקשים לבדוק האם השינוי נעשה באחת משלוש העמודות הראשונות (A:C) ולכן נבדוק אם מספר העמודה של התא שהפעיל את האירוע, קטנה מ-4

הרצת מאקרו אם השינוי נעשה בשורה מספר 4:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 4 Then
Debug.Print Target
End If
End Sub

הרצת מאקרו אם השינוי נעשה בתא שניתן לו השם MyCell

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Name.Name = "MyCell" Then
Debug.Print Target
End If
End Sub

אבל כאן צריך הסבר קצר:
שימו לב לפקודה המשונה Target.Name.Name
מדוע צריך לחזור על Name?
התשובה לכך היא שהמופע הראשון של Name מתייחס לכתובת התא, ואילו המופע השני לשם שניתן לו, כפי שתוכלו לראות בחלונית Watches:

Watch Window

ולמה הוספתי את הפקודה
On Error Resume Next
משום שאם לתא אין שם, תתקבל שגיאה, והקוד יפסיק את ריצתו, ולכן עלינו לומר לקוד שגם אם לתא אין שם, יש להמשיך את ריצת הקוד.

כיצד נריץ קוד רק אם כתובת התא שהפעילה אותו נמצאת בתוך טווח מסוים?

לעתים אנו רוצים להריץ קוד רק אם נעשה שינוי בטבלת נתונים מסוימת.
נניח שטבלת הנתונים שלנו נמצאת בטווח B2:F8

טבלת אקסל

 

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("B2:F8")) Then
Debug.Print Target
End If
End Sub

כלומר – אנחנו בודקים אם התא שבו כתבנו את הערך, מצטלב (Intersect) עם הטבלה, ובעברית – האם הוא נמצא בתוך הטבלה או מחוצה לה

דילוג לתוכן