סגירת תוכנת אקסך דרך VBA
- 
אני רוצה לסגור קובץ אקסל דרך VBA, ויש לי 2 דרכים לעשות זאת
- ברמת הקובץ - 
ActiveWorkbook.Close - ברמת התוכנה -
Application.Quit 
הבעיה בדרך הראשונה היא שזה סוגר את החלון הפעיל אך אינו סוגר את התוכנה (ואם אין עוד קובץ אקסל פתוח - נשאר התוכנה פתוחה עם רקע אפור ריק), ובדרך השניה יש גם בעיה שהיא סוגרת את כל החלונות הפתוחים, ולא רק את החלון הפעיל.
ניסיתי לכתוב מאקרו שיבדוק אם יש עוד חלון פעיל, כך:Sub סגירה() On Error Resume Next If IsError(Windows(2).Activate) Then Application.Quit Else ActiveWorkbook.Close End If End Subאבל הבעיה בזה היא שלפעמים הקובץ הפעיל הוא החלון השני, השאלה אם יש דרך יותר מקורית כדי לבדוק את הנ"ל ולהגיע לתוצאה הרצויה, תודה.
 - ברמת הקובץ - 
 - 
אני רוצה לסגור קובץ אקסל דרך VBA, ויש לי 2 דרכים לעשות זאת
- ברמת הקובץ - 
ActiveWorkbook.Close - ברמת התוכנה -
Application.Quit 
הבעיה בדרך הראשונה היא שזה סוגר את החלון הפעיל אך אינו סוגר את התוכנה (ואם אין עוד קובץ אקסל פתוח - נשאר התוכנה פתוחה עם רקע אפור ריק), ובדרך השניה יש גם בעיה שהיא סוגרת את כל החלונות הפתוחים, ולא רק את החלון הפעיל.
ניסיתי לכתוב מאקרו שיבדוק אם יש עוד חלון פעיל, כך:Sub סגירה() On Error Resume Next If IsError(Windows(2).Activate) Then Application.Quit Else ActiveWorkbook.Close End If End Subאבל הבעיה בזה היא שלפעמים הקובץ הפעיל הוא החלון השני, השאלה אם יש דרך יותר מקורית כדי לבדוק את הנ"ל ולהגיע לתוצאה הרצויה, תודה.
@חנון-המרבה אתה כמעט שם, פשוט תשתמש באובייקט
ThisWorkbookבמקום באובייקטActiveWorkbook, כך:Sub סגירה() If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close End If End Subההבדל ביניהם הוא ש
ThisWorkbookמחזיר את החוברת שמתוכה רץ הקוד, ואילוActiveWorkbookמחזיר את החוברת הפעילה. - ברמת הקובץ -