I am responsible for a very large Excel 2010 spreadsheet with links to all sorts of external data sources including Bloomberg, 65 worksheets with vba modules and references to other vba add-ins.
I have noticed that the VBA project has acquired multiple Workbook Objects.
There's the standard ThisWorkbook. However, a number of the worksheets have also been turned into Workbook objects by Excel, leaving the original worksheet as a copy of the previous one, minus the code.
This doesn't appear to be a result of anyone's actions. Indeed, I didn't think it possible to have more than one Workbook object!
For example, I had one worksheet called wksInputs which has now been turned into a Workbook object, and the original wksInputs is now called wksInputs1.
I can't delete the wksInputs Workbook object.
Please could someone help explain what's going on here, and how I might be able to resolve the problem...?
Many thanks.
This problem occurred in my code when I passed a worksheet to a Sub as a parameter, like this:
To fix the problem, I created a new workbook, copied all the data from all the legitimate sheets in my original into identically named sheets in my new workbook. Then copied all the code from the original to the new workbook.
Then I changed the subroutine call to
and added one line of code to my subroutine BuildCodeString:
I don't know what causes this problem, but this workaround worked for me.
Here is my solution, it works consistently and you don't need to manually copy the sheets and code across to a blank workbook. I've tested this method on several corrupted workbooks that were giving me the "Automation error - Catastrophic failure" error upon launch.
NOTE: Original corrupted file was saved as .xlsm
The file is now fixed! You can re-save the MyFile.xlsb file as .xlsm if required. In my experience .xlsm files become corrupted quite easily, so I'm going to get into the habit of always using the .xlsb format.
Hope somebody finds this helpful :)
I had the same issue in PowerPoint (2007), where "Slide1" was empty and couldn't be removed. The answer by @Scoox pointed me to a solution:
This worked for me, I believe it would work with Excel, too.
Had the same issue with Office365, found a mistake where I had the same name for a public constant and a parameter for a function. After changing the parameter name in the function it did not happen again.
I had the same issue with a file that had multiple workbook objects and was generating the "Automation error - Catastrophic failure" error when opened.
I saved the *.xlsm file as an *.xlsb. When I re-opened the *.xlsb file all the workbook objects were still in the file. I reasonably assumed that the errors in the file were going to cause problems eventually and resigned myself to copy everything to a new file.
However when I closed the *.xlsb file and re-opened the original *.xlsm all the objects had disappeared and the file wasn't generating the "Automation error - Catastrophic failure" error.
Weird I admit but the problem still persisted in the *.xlsb file but the original *.xlsm (which is the one I was trying to save) was fine.
It may be a one off but it might be worth a try...
You can introduce this behavior by doing the "convert to .zip and unzip trick", and then replacing the
vbaProject.bin
file (the macro code file) with a vbaProject.bin from a different project that has a different sheet structure. Don't know if that's what happened to OP, but it's what happened to me.