Excel VBA项目已生成多个工作簿对象

我负责一个非常大的Excel 2010电子表格,其中包含各种外部数据源(包括Bloomberg,65个工作表,vba模块和其他vba加载项的参考)的链接。

我注意到VBA项目已经获得了多个工作簿对象。

有标准的ThisWorkbook。 但是,许多工作表也被Excel转换成Workbook对象,将原始工作表保留为前一个工作表的副本,减去代码。

这似乎不是任何人的行为的结果。 的确,我不认为有多个Workbook对象是可能的!

例如,我有一个名为wksInputs的工作表,现在已经变成一个Workbook对象,而原来的wksInputs现在被称为wksInputs1。

例

我无法删除wksInputs Workbook对象。

请有人帮忙解释一下这里发生了什么,以及我怎么能解决这个问题…?

非常感谢。

当我将工作表作为parameter passing给Sub时,发生在我的代码中的问题,如下所示:

调用BuildCodeStrings(Sheet2,sAccount)
Sub BuildCodeStrings(wsSource作为工作表,s作为string)

为了解决这个问题,我创build了一个新的工作簿,将我原来的所有合法工作表中的所有数据复制到我的新工作簿中同名的工作表中。 然后将所有代码从原始复制到新的工作簿。

然后我改变了子程序调用

调用BuildCodeStrings(“IC帐户”,sAccounts)
Sub BuildCodeStrings(sSource As String,s As String)

并将一行代码添加到我的子程序BuildCodeString中:

设置wsSource = ThisWorkbook.Sheets(sSource)

我不知道是什么原因导致了这个问题,但是这个解决方法对我来说很有效。

这是我的解决scheme,它始终如一地工作,您不需要手动复制工作表和代码到一个空白的工作簿。 我已经testing了这个方法在几个损坏的工作簿上,给我的“自动化错误 – 灾难性的失败”错误发射。

注意:原始损坏的文件保存为.xlsm

  1. 打开一个空白的Excel工作簿
  2. 开发人员选项卡>macros安全性>禁用所有macros而不通知
  3. closuresExcel
  4. 双击损坏的文件,例如,MyFile.xlsm
  5. 文件>另存为…> MyFile.xlsb(不是.xlsm),select.xlsb格式是什么
  6. 开发人员选项卡>macros安全性>启用所有macros(或您喜欢的任何级别的安全)
  7. closuresExcel
  8. 双击MyFile.xlsb

该文件现在已修复! 如果需要,可以将MyFile.xlsb文件重新保存为.xlsm。 根据我的经验,.xlsm文件很容易被损坏,所以我将习惯使用.xlsb格式。

希望有人认为这有帮助:)