כל תוכנית שאתה בונה, כשהיא מועלה לזיכרון (כשאתה מפעיל אותה), היא מעלה לזיכרון את קטע הנתונים (משתנים וכו'...), ואת קטע הקוד (פונקציות וכו'...).דבר נוסף שקורה, זה שהתוכנית "מבקשת" ממערכת ההפעלה להקצות לה שטח זיכרון לשימוש הפונקציות (למשל, בלוק זיכרון עבור ערך ההחזרה של פונקצייה מסויימת), וגם שטח זיכרון לשימוש של הקצאת זיכרון דינאמית...
הזיכרון לשימוש הפונקציות, נקרא "מחסנית", או באנגלית Stack, וכמובן שהוא מוגבל, כמו כל זיכרון אחר...
כשנתת את הפקודה cmdClose.Value = True, בעצם אמרת שהכפתור לחוץ...זאת אומרת שכאילו לחצת עליו...
ברגע שאתה עושה את זה בפונקצייה שמטפלת במצבים שבהם הכפתור נלחץ, הפונקצייה הזו (Private Sub cmdClose_Click) קוראת לעצמה..ברקורסייה...בלי תנאי...
כלומר, אתה כאילו יוצר לולאה אינסופית...אבל בכל זאת, קיבלת סוף...למה ?
בגלל שמרוב שאתה קורא כל-כך הרבה פעמים לפונקצייה הזו, נגמר הזיכרון שהוקצה לה ב"מחסנית" ולכן אתה מקבל הודעת שגיאה.