Excel has always had the problem that it doesn't properly release memory for objects it uses. You have to explicitly release the memory by setting your variable to nil. I don't think (gc) is working because it only releases "unused" memory. In the case of Excel, your variables are still "in use" even though they have gone out of scope. I haven't done this in lisp, but in COM/VBA, you have to release memory of your variables in reverse order in which you created them. For example, you can't set a workbook object to nil before setting a sheet object to nil because the workbook object holds a pointer to the sheet object. Typically, you would set to nil in the following order 1. sheet object, 2. workbook object, 3. application object.