כתבתם קוד שאמור לבצע פעולות, ובסיום לבצע פעולה של שמירת קובץ.
שמירת הקובץ נעשית בדרך כלל באמצעות שימוש בפקודה ActiveWorkbook.Save, ששומרת את הקובץ במיקום הנוכחי,
ובעצם מבצעת פעולת שמירה שדורסת את הגרסה הקודמת.
הבעיה בפקודה הזאת היא שאין אפשרות לשמור את הקובץ במקום אחר. ולמה שנרצה לעשות זאת?
הסיבה לכך היא שפעמים רבות אנו כותבים קוד שעושה שינויים על נתונים, ובסיום שומר את הקובץ בתיקיה ייעודית,
ולא דורס את קובץ המקור.
ומה יקרה אם תנסו להשתמש בפקודה (ההגיונית, יש לציין)
ActiveWorkbook.SaveAs?
כאן תיתקלו בשתי בעיות:
האחת, מכיוון שבגרסאות הרצועה (גרסאות אקסל 2007 ומעלה),
לא ניתן לשמור קבצים שמכילים מאקרו בקובץ שהסיומת שלו היא XLSX,
ובהנחה שהקובץ שלכם הוא קובץ חדש, תקבלו הודעת שגיאה שאומרת
"אין אפשרות לשמור את התכונות הבאות בחוברת עבודה ללא פקודות מאקרו…",
כפי שאתם יכולים לראות בתמונה הבאה:
אני חייבת לציין שזו אחת ההודעות המבלבלות ביותר באקסל,
מכיוון שאם אתם רוצים לשמור את הקובץ בתצורה שמאפשרת שמירת קודי מאקרו, אתם צריכים ללחוץ דווקא על לא.
הלחיצה האוטומטית על אנטר, תכונה שרובנו לוקים בה, תשמור את הקובץ בסיומת XLSX, ותמחק את כל המאקרואים שכתבתם בעמל רב.
חמור מכך, לא תוכלו לראות זאת מיד, מכיוון שהמאקרואים שאתם כותבים עדיין יופיעו בתוך המודול, עד שתסגרו את הקובץ ותפתחו אותו מחדש.
הבעיה השנייה, בהנחה שהקובץ שלכם כבר נשמר פעם בתצורת XLSM, היא שהוא עושה את אותה הפעולה של SAVE ולא שואל אתכם היכן לשמור את הקובץ.
אז אילו פתרונות נוספים קיימים?
שמירת קובץ ע"י כתיבת הנתיב בגיליון
אחד הפתרונות הוא לכתוב את הנתיב הרצוי באחד מתאי הגיליון, ולהפנות אליו את פקודת השמירה.
אם תבחרו בפתרון זה, יהיה עליכם לבדוק בקוד שתכתבו שהתיקיה הנבחרת אכן קיימת, ולהשתמש בפקודות ליצירת תיקיה MkDir, ולשינוי הנתיב ChDir.
שמירת קובץ בנתיב שנבחר על ידי המשתמש
פתרון אחר הוא לתת למשתמש את האפשרות לבחור את הנתיב שבו ישמר הקובץ באמצעות הפקודה הבאה:
Application.Dialogs(xlDialogOpen).Show
לאחר הרצת שורת הקוד הזאת, יפתח חלון השמירה המוכר, ויבקש מהמשתמש לבחור את שם הקובץ והנתיב הנוחים והרצויים לו.
למאמר נרחב יותר בנושא, שמכיל אפשרויות נוספות לפתיחת הקבצים, לחצו כאן
מעוניינים בטיפ נוסף?
עברו לקריאת המאמר שמסביר על הדרכים השונות להרצת קוד VBA