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:
Call BuildCodeStrings(Sheet2, sAccount)
Sub BuildCodeStrings(wsSource As Worksheet, s As String)
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
Call BuildCodeStrings("IC Accounts", sAccounts)
Sub BuildCodeStrings(sSource As String, s As String)
and added one line of code to my subroutine BuildCodeString:
Set wsSource = ThisWorkbook.Sheets(sSource)
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
- Open a blank Excel workbook
- Developer tab > Macro security > Disable all macros without notification
- Close Excel
- Double-click corrupted file, for example, MyFile.xlsm
- File > Save as... > MyFile.xlsb (not .xlsm), choosing the .xlsb format is what does the trick
- Developer tab > Macro security > Enable all macros (or whatever level of security you prefer)
- Close Excel
- Double-click MyFile.xlsb
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:
- Export all VBA Modules into text (.bas) files
- Save the .pptm (or .xlsm) file as a .pptx (or .xlsx)
- Close PowerPoint (or Excel)
- Open this .pptx/.xlsx and save it back as a .pptm/.xlsm
- Import the original VBA text (.bas) files
- Manually re-associate all buttons to original macro functions
- Add any external Reference you had in original file
- Save and test if everything's fine
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.
来源:https://stackoverflow.com/questions/18273071/excel-vba-project-has-generated-multiple-workbook-objects