איך להפעיל תוכנות אחרות מתוך אקסל ?
כיום, אנחנו עובדים עם תוכנות רבות. פעמים רבות, אנחנו רוצים ליצור מצב שבו נוכל לפתוח בקלות תוכנות אחרות, כמו Word, Power point, וכדומה. למעשה יש יותר מדרך אחת לעשות זאת, באמצעות מאקרו VBA. אך אני אתמקד בצורה מאוד פשוטה יחסית. בפקודה Shell.
הפקודה Shell היא פקודת VBA שלמעשה מאפשרת לנו לכתוב פקודות, כאילו אנחנו בתוך “שורת פקודה” של Windows.
הפקודה הזאת, מתאימה למקרים הבאים :
- להפעיל תוכנות אחרות: Word, Adobe PDF, Sap, CRM וכדומה.
- לפתוח דפי אינטרנט באמצעות דפדפן, למשל כרום.
- לשלוח אימייל באמצעות Outlook (עוד שיטה בנוסף ל- כל השיטות לשלוח מייל מאקסל)
- להפעיל סקריפטים בשפות כמו Python שעושים משהו.
- להפעיל פקודות שמעתיקות קבצים, מכווצות קבצים וכדומה.
חשוב לציין, שעל מנת לפתוח קובץ במיקום קבוע, מספיק לשים קישור אליו, ואין צורך “להסתבך” עם פקודות מאקרו. למשל, כדי לפתוח קובץ Word, מספיק לשים קישור אליו, והקובץ יפתח מעצמו. אך אם נרצה לשלוט בפרמטרים שונים, אז נשתמש ב- Shell. למשל אם נרצה שהחלון יפתח מוקטן, אז נשתמש ב-Shell.
מה זה Shell ? מה זה שורת פקודה של Windows ?
כל מערכת הפעלה מכילה צורה מסויימת לפנות אליה. במערכת ההפעלה Windows אנחנו בדרך כלל משתמשים .בלחיצה על אייקונים, ובחלונות שונים של תוכנות (זוהי משמעות השם : “חלונות”).
יחד עם זאת, קיימת אפשרות אחרת לשלוט במערכת ההפעלה, והיא האפשרות שהייתה קיימת לפני “Windows”. זוהי “שורת הפקודה”, או באנגלית Shell. מדובר בחלון בו ניתן להקליד פקודות שונות למערכת ההפעלה, להפעיל תוכנות במחשב ועוד.
אם תרצו לפתוח את חלון ה-shell בעצמכם, תוכלו ללחוץ על כפתור Windows, ולחפש את המילה cmd.
איזה תוכנות ניתן להפעיל מתוך Shell ?
כל תוכנה על המחשב אפשרי להפעיל מתוך שורת הפקודה של Windows.
נדגים זאת בצורה פשוטה על הפעלה של Word,
שימו לב שזוהי פקודת ה-VBA , וצריך כמובן לשים אותה בתוך מאקרו במקום המתאים. בנוסף, הפקודה הזאת מכוונת אל Word בגירסה מסויימת, כדי לראות איך שולפים את הנתיב של Word אצלכם במחשב, ראו מה עשיתי בסרטון.
Shell "C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE C:\Documents\MyDoc.docx", vbNormalFocus
איך לפתוח קובץ Word מתוך אקסל ?
אך, אם נרצה לשכלל מעט את הפקודה, כדי שהיא תוכל לסייע לנו לפתוח קובץ וורד כלשהוא, אז נכניס את שם הקובץ אל תוך משתנה.
Dim FilePath as String
Shell "C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE " & FilePath, vbNormalFocus
ובצורה הזאת, נוכל לפתוח למעשה כל קובץ Word. וזה כבר משהו שלא יכולנו לעשות באמצעות קישור.
דוגמאות מעשיות לשימוש בפקודה Shell ב- VBA
מכיוון שעל מנת להפעיל קבצי Word, PowerPoint וכדומה, מספיק כמו שאמרתי להשתמש בקישור. לכן אתמקד ב-2 פעולות אחרות יותר שימושיות.
- איך לכווץ קובץ, כלומר ליצור קובץ ZIP
- איך לחבר כמה קבצי CSV יחד לקובץ אחד גדול.
איך לאחד קבצי CSV יחד לקובץ אחד
נניח ויש לנו מספר קבצי CSV, ואנחנו רוצים למזג אותם יחד לקובץ אחד. מדובר על קבצים ללא כותרות כמובן.
אז נוכל לעשות זאת באמצעות הפקודה COPY של שורת הפקודה. הפקודה יודעת להעתיק קובץ ממיקום אחד אל מיקום אחר. אך מכיוון שהפקודה יכולה גם להעתיק מספר קבצים , אל מיקום אחד… התוצאה תהיה שהיא יודעת למזג מספר קבצים יחד אל קובץ אחד גדול.
אז הנה המאקרו הרלוונטי :
Shell "cmd.exe /S /C copy C:\SomeFolder\c*.csv C:\OtherFolder\combine3.csv", vbNormalFocus
איך לכווץ קובץ, כלומר ליצור ZIP מתוך אקסל
נניח שיש לנו קובץ אקסל שמאפשר להריץ מאקרויים. נוסיף אליו כפתור ונצמיד לו מאקרו, שכל פעם שיופעל, יכווץ קובץ מסויים ל- ZIP חדש. בהמשך אפשר לשלוח את הזיפ למישהו וכדומה.
המאקרו יראה כך :
Dim cmd As String
cmd = "powershell Compress-Archive -Path C:\TEMP\Files\* -DestinationPath C:\TEMP\Ready\MyFile.zip"
Shell cmd, vbMaximizedFocus
MsgBox "Finished"
כמובן, שאולי נגדיר משתנים של שם הספריה ממנה נלקחים הקבצים, ושם קובץ הייעד, אבל את זה אני כבר משאיר לכל אחד לעשות לפי הצורך היעודי שלו.
סיכום - הפקודה Shell של VBA
הפקודה ‘Shell’ VBA משמשת לביצוע תוכניות או פקודות חיצוניות מתוך Excel. ראינו כיצד להשתמש בפקודה על מנת לפתוח קובץ Word במיקום משתנה. כיצד לאגד יחד כמה קבצים, וכיצד לכווץ כמה קבצים יחד לקובץ ZIP.
בצורה דומה אפשר גם להריץ סקריפט פייטון מתוך אקסל, לפתוח מצגות, דפדפן ועוד.