【发布时间】:2016-10-15 23:03:02
【问题描述】:
我怀疑答案是否定的,因为这是一个循环论证
但是……
我将报表从软件包直接导出到现有 Excel 工作簿中。软件包在 Excel 中创建一个新工作表并填充该工作表。默认情况下,新工作表称为 Sheet1。这是一个大型报表,在 Excel 工作簿中有一个 Workbook_SheetChange 事件。导出报告的每个单元格在 Excel 中单独更新,因此每个单元格都会运行 SheetChange 事件。这将导入时间增加了 10 倍。
我可以在 SheetChange 事件中添加以下内容
如果 Sh.name = "Sheet1" 然后退出 sub
这很好地加快了导入过程,但当然不会再触发任何事件,因为我已禁用它们。因此工作簿宏将无法使用。
我希望能够在 Sheet1 工作表停用时添加 application.enableEvents = true 但当然这不会触发,因为事件已被禁用。
我可以添加一个必须按下的按钮,该按钮将通过子模块触发重新启用,但期望用户必须这样做并不是特别直观。还有其他事件可能需要在用户按下之前触发,以免错过。
因此,我的愚蠢问题是 - 还有其他方法可以重新启用事件吗?
我想,我可以在每个工作表中都有一个 Worksheet_Change 事件,而不是一个全局 Workbook_SheetChange 事件,但我想在我这样做之前我会问一下。
谢谢
【问题讨论】:
-
如何将报表导出到现有的 Excel 工作簿中?是通过 VBA 代码吗?
-
不,很遗憾没有。直接从其他软件中单击按钮并选择要导出到的工作簿
-
然后将其导出到一个全新的工作簿,完成后,编写一个简单的 VBA 代码将其导入您的工作簿。在第二步中,您将在开头设置
Application.EnableEvents = False,在结尾设置Application.EnableEvents = True -
可以的。我认为总的来说,我只是将事件从 Workbook_SheetChange 移到每个工作表的 Worksheet_Change 事件,因为这将是对 500 名用户的再教育,告诉他们导出到新书而不是现有书。感谢您的努力
-
它可能对 500 个用户是透明的:他们会打开“普通”工作簿,您的宏会在 Workbook_Open() 事件中触发,并从“临时”工作表导入到其 sheet1。没有人会注意到这一点。