שיתוף | ידיעה חשובה VBA: ביטול פעולה אחרונה למאקרו שלם כיחידה אחת
-
פוסט זה נמחק!
-
@menajemmendel
לתועלת העניין ולמקרה שזה עדיין רלוונטי:לכידת שגיאות הינה פקודת
on error
בה אתה מגדיר מה התוכנה תעשה במקרה של שגיאה
מקובל לעשות משהו כמוon error goto error_handler
ואז בסוף הקוד לשים
exit sub error_handler:
ואז
msgbox
(עם הודעה כלשהי)
ובמקרה שלך לעשות את סיום לכידת הטקסט. -
@menajemmendel אולי ש @pcinfogmach יוסיף את זה לעיצוב תורני?
-
@menajemmendel נו באמת.
אין ל @pcinfogmach איזה מאקרו שיוסיף את זה אחד אחד? -
@האדם-החושב
הנה לטובת הכלל אני אפרט איך עושים את זה:
באופן עקרוני, הפקודה הזאת הוא כמין סוגריים, שאומר כל מה שבתוך הסוגריים יחשב יחידה אחת, לענין הביטול פעולה אחרונה, ואז כדי לפתוח סוגריים כותבים 2 שורות, ושורה אחת בסוף המאקרו שהוא סוגר הסגוריים, כזה:Dim my_undo As Object // מי שלא מבין שורה זאת היא שלא התייחס אליה Set my_undo = Application.UndoRecord my_undo.StartCustomRecord ("כאן כותבים השם של החטיבה איך שרוצים שיופיעה בתוך הרשימה של ביטול פעולה אחרונה")
אחרי זה כו כותבים כל המאקרו וכו'
ובסוףmy_undo.EndCustomRecord
נמצא משהו כזה:
Set my_undo = Application.UndoRecord my_undo.StartCustomRecord ("my name") ''''MACRO'''' my_undo.EndCustomRecord
אלא שיש בעיה שהעיר עליה ידינו @מאקרו והוא, שאם מאיזה סיבה יהיה תקלה באמצע המאקרו ולא יגמר, אזי לא יגיע לסוף הסוגריים, ולא יסגר אף פעם ה''סוגריים'' של הביטול פעולה אחרונה, ו''ביטלנו'' מוורד את האפשרות לבטל פעולה אחרונה.
אז מה שצריך לעשות הוא להוסיף פקודה, מתחילת הפקודה שאם יהיה בתוך המאקרו איזה תקלה, מיד יסגור את הסוגריים, ורק אח''כ יצא מהמקרו, וז נראה משהו כזה:
Dim my_undo As Object Set my_undo = Application.UndoRecord my_undo.StartCustomRecord ("my name") On Error GoTo ending ''''MACRO'''' ending: my_undo.EndCustomRecord
-
@menajemmendel
רק הערה קטנה: הוספת קוד זה למאקרו עלול להאט את המאקרו ובפרט במאקרו מורכב.
לשיקולכם.... -
@pcinfogmach
איך אתה יודע? לא שאני לא מאמין לך, אני מתכוון, איך גילית את זה? -
@menajemmendel
ניסיתי. וגם מסברא - כי זה מקליט כל מה שאתה עושה. וגם כך קראתי היכן שהוא.הבעיה היא שמאקרו זה דבר כל כך עדין (או דפוק) שכל דבר קטן "מעצבן אותו". -
@pcinfogmach כתב בשיתוף | ידיעה חשובה VBA: ביטול פעולה אחרונה למאקרו שלם כיחידה אחת:
וגם מסברא
מסברא זה דוקא איפכא מסתברא, כי עי''ז חוסך עבודה, הרי בלי הפקודה הזאת היא המחשב צריך להקליט כל פעולה קטנה (כלומר לעשות מלא תמונות של הקובץ בכל מצב ומצב) ואילו ע''י פקודה זו הוא מפסיק לצלם בכל פעולה, אלא עושה צילום בתהחלב ובסוף
(כי ע''י הביטול פעולה אחרונה וכו', ולהחזיר פעולה אחרונה, זה לא שנותן פקודה לשחזר או לעשות אותה מחדש, אלא זה כמו תמונת מערכת, ההוכחה לזה, הוא שגם מאקרו שלוקח דקה לעשותו [לדוגמא], אם הוספת את הפקודה של UNDO אתה יכול לבטל אותו ולהחזיר אותו בשניה, ולא צריך שוב להמתין דקה, -
@menajemmendel כתב בשיתוף | ידיעה חשובה VBA: ביטול פעולה אחרונה למאקרו שלם כיחידה אחת:
ואילו ע''י פקודה זו הוא מפסיק לצלם בכל פעולה, אלא עושה צילום בתהחלב ובסוף
אני לא בעניינים אבל לפי מה שזכור לי הוא ממשיך לצלם ואדרבה הוא יוצר איזהו ערימה של צילומים.
ציטוט מלינק שהבאת בתחילת השרשרור:
The StartCustomRecord method begins recording the actions that are included in the custom undo record.
ועוד שם:
All the actions taken by the code between the StartCustomRecord call and the EndCustomRecord call are linked into one UndoRecord object. -
הוספתי את הפקודה הזו לתוסף "וורד תורני" [במודול RIBBONCONTROL, כדי לחסוך הרבה עבודה]
ובחלק מהמאקרואים זה מקריס את וורד, מה גם שמאקרו שהפקודה שלו היא להציג את היוזר פורם התוספת הזו לא עוזרת [אולי צריך להוסיף את זה לתוך המאקרו שביוזר פורם עצמו?]
וורד תורני כולל ביטול.dotm -
@האדם-החושב כתב בשיתוף | ידיעה חשובה VBA: ביטול פעולה אחרונה למאקרו שלם כיחידה אחת:
אולי צריך להוסיף את זה לתוך המאקרו שביוזר פורם עצמו?
כן