י' שואל:
שלום רב,
כיצד ניתן להפעיל מקרו/פרוצדורה באופן אוטומטי , ללא לחיצה על הכפתור הווירטואלי.
אחדד, בהתקיים תנאי על אחד התאים בגיליון הפעל אוטומטית את המקרו/פרוצדורה.
שאלה נוספת ברשותכם, מהן הפקודות הבאות באקסל? -
פנה לתא הימני/השמאלי/העליון/התחתון, בלוטוס (בזמנו) הפקודה הייתה {right} וכו'. - מחק את תוכן התא, בלוטוס הייתה {delete}
תודה רבה
תשובה:
מצ"ב פתרון אפשרי -
ניתן להגדיר ב-VBA שיגרה בשם בשם Worksheet_Change שתופעל אוטומטית על ידי אקסל כאשר יבוצע שינוי בגיליון.
הפרמטר לשיגרה הוא משתנה בשם Target מטיפוס Range.
הפרמטר הוא קבוע, שווה לכתובת התא/תאים שהשתנו ומועבר אוטומטית לשיגרה על ידי אקסל.
מצ"ב דוגמה לקוד שהוגדר עבור גיליון באקסל ומציג הודעה במקרה שמוזן בתא A1 ערך שלילי.
ניתן להוסיף באותה שיגרה בדיקות לתאים אחרים בגיליון.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngCellRow As Long, intCellCol As Integer
lngCellRow = Target.Row
intCellCol = Target.Column
If lngCellRow = 1 And intCellCol = 1 And Target.Value < 0 Then
MsgBox "Negative value."
End If
End Sub
מצ"ב דוגמה לתיבת הטקסט שמוצגת כאשר מעודכן ערך בתא A1 -
בנוגע לשאלה השנייה -
מהן הפקודות באקסל לפעולות הבאות - פנה לתא הימני/השמאלי/העליון/התחתון, בלוטוס (בזמנו) הפקודה הייתה {right} וכו'. - מחק את תוכן התא, בלוטוס הייתה {delete}
ניתן לבצע זאת באקסל על ידי מתן פקודה לאקסל לבחור תא באופן הבא - Sheets("Sheet Name").Cells(Row,Column).Activate כאשר Sheet Name הוא שם הגיליון בו יש לבצע את הפעולה ו-Row,Column הם השורה והעמודה של התא שיש לבחור.
מצ"ב דוגמה לקוד שמופעל אוטומטית באקסל בעת שינוי תא בגיליון.
הקוד מציג תיבת קלט -
אם נבחר R אז נבחר התא מימין לתא בו בוצע השינוי.
אם נבחר L אז נבחר התא משמאל לתא בו בוצע השינוי.
אם נבחר U אז נבחר התא מעל לתא בו בוצע השינוי.
אם נבחר D אז נבחר התא מתחת לתא בו בוצע השינוי.
אם נבחר C אז מבוצע ניקוי של התא.
בתחילת הקוד מופיעה הפקודה Application.EnableEvents = False שמטרתה למנוע הפעלה נוספת של השיגרה במקרה של בחירה ב-C הגורמת לעדכון ערך תא בגיליון.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngCellRow As Long, intCellCol As Integer
lngCellRow = Target.Row
intCellCol = Target.Column
Application.EnableEvents = False
strCommand = InputBox("Enter command (R,L,U,D,C)")
With Sheets("Sheet1")
Select Case UCase(strCommand)
Case "R"
If intCellCol > 1 Then .Cells(lngCellRow, intCellCol - 1).Select
Case "L"
.Cells(lngCellRow, intCellCol + 1).Select
Case "U"
If lngCellRow > 1 Then .Cells(lngCellRow - 1, intCellCol).Select
Case "D"
.Cells(lngCellRow + 1, intCellCol).Select
Case "C"
.Cells(lngCellRow, intCellCol).ClearContents
End Select
End With
Application.EnableEvents = True
End Sub
צוות AnyFit