Excel VBA项目已生成多个Workbook对象

Ale*_*rry 8 excel vba excel-vba excel-2010

我负责一个非常大的Excel 2010电子表格,其中包含各种外部数据源的链接,包括Bloomberg,带有vba模块的65个工作表以及对其他vba加载项的引用.

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

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

这似乎不是任何人的行为的结果.实际上,我认为不可能拥有多个Workbook对象!

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

例

我无法删除wksInputs Workbook对象.

请有人帮忙解释这里发生了什么,以及我如何能够解决问题......?

非常感谢.

Sco*_*oox 5

这是我的解决方案,它始终如一地工作,您不需要手动将工作表和代码复制到空白工作簿。我已经在几个损坏的工作簿上测试了此方法,这些工作簿在启动时出现“自动化错误 - 灾难性故障”错误。

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

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

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

希望有人觉得这有帮助:)


小智 1

当我将工作表作为参数传递给 Sub 时,我的代码中出现了此问题,如下所示:

调用 BuildCodeStrings(Sheet2, sAccount)
Sub BuildCodeStrings(wsSource As Worksheet, s As String)

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

然后我将子程序调用更改为

Call BuildCodeStrings("IC Accounts", sAccounts)
Sub BuildCodeStrings(sSource As String, s As String)

并向我的子例程 BuildCodeString 添加了一行代码:

设置 wsSource = ThisWorkbook.Sheets(sSource)

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