插入代码时,打开事件中的 Excel 2010 vba EnableEvent 不起作用
Posted
技术标签:
【中文标题】插入代码时,打开事件中的 Excel 2010 vba EnableEvent 不起作用【英文标题】:Excel 2010 vba EnableEvent in Open event not working when code inserted 【发布时间】:2019-03-28 03:38:58 【问题描述】:当我尝试在具有 100 多个宏的复杂 Excel 模型中提高效率时,我想确保在模块运行以将带有公式的模板转换为仅值文件后启用事件。使用下面的代码,我希望插入到其他没有 VBA 的 Excel 文件中的其他事件代码可以工作,但是下面的 Open 事件代码不会启用事件。我进行了搜索,发现 EnableEvents 很棘手。我的目标是使用我在网上找到的一些其他代码来“优化”或加速代码的运行将更广泛地成为可能。它包括 EnableEvent 语言(在代码开头将其关闭并在代码末尾打开)。
这是我为获取模板的“VALUES”版本而调整的代码以启用一般事件,一旦我导航到另一个选项卡并使用名为 Private Sub Worksheet_SelectionChange(ByVal Target作为范围)。
Sub AddSheetCodeToAuto_Open()
' To turn on events
Dim Startline As Long, HowManyLines As Long
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
Startline = 1
HowManyLines = .CountOfLines
.DeleteLines Startline, HowManyLines
.InsertLines 1, "Private Sub Workbook_Open()"
.InsertLines 2, vbNewLine
.InsertLines 3, "Sheets(Sheet7).Select
.InsertLines 4, "Application.EnableEvents = True"
.InsertLines 5, "End Sub"
End With
End Sub
当我使用即时窗口并单步执行代码时,Application.EnableEvents 值在打开相关文件后始终为 FALSE,但鉴于打开工作簿事件的事件处理程序如上所示,为什么事件不会转在? 提前感谢您的专业知识。
【问题讨论】:
该代码应该放在ThisWorkbook
代码模块中,而不是工作表模块中。
没错,我忘了提到 Workbook_Open 代码已移入该模块。这是修改后的代码: With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule 麻烦的是,如果我在“转换为值”过程结束时关闭事件,则自动打开事件处理程序在启用时无效事件。
通常,您可以通过在关闭事件的任何过程中包含错误处理来管理此问题,以确保您的代码不会崩溃并关闭事件。
【参考方案1】:
我认为第 3 行遇到错误。更改 3 即可解决问题
.InsertLines 3, "Sheets(" & Chr(34) & "Sheet7" & Chr(34) & ").Select"
这也取决于“Sheet7”的存在。
但最好的解决方案仍然是@Tim Williams 的建议
【讨论】:
您是正确的,第 3 行需要引用特定的工作表名称,而不是 Excel 工作表 # (Sheet7)。我确实做了那个改变。我没有使用“Sheet7”作为工作表选项卡上的工作表名称。 按照 Tim 的建议,我一直在考虑如何使用错误处理来打开事件,但我没有收到自动打开事件未运行或正常工作的错误消息。它只是不启用事件。我会更加努力地思考如何安排组件以确保在 a) 删除 VBA 代码(除了重新插入所需事件代码以导航到其他工作表的代码之外)之后启用事件,b) 将文件保存为“VALUES”文件,并且c) 重新打开 VALUES 文件,其中 Open 事件将打开事件并使其保持打开状态。以上是关于插入代码时,打开事件中的 Excel 2010 vba EnableEvent 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 Excel 2010 中的第一个单词之后和最后一个单词之前插入逗号
Excel插入图片时总是显示:导入此文件时出错,怎么回事【图片】