【问题标题】:Event in Workbook not working when reopening重新打开时工作簿中的事件不起作用
【发布时间】:2016-02-09 20:00:08
【问题描述】:

我有一个 Excel 宏,可以创建一个带有事件的新自定义工作簿。该宏还将 .bas 和 .cls 文件复制到新工作簿上,并将链接更改为新工作簿。

创建新工作簿后,包括事件在内的所有内容都可以正常工作。但是当我关闭它并重新打开它时,这些事件不再起作用。我意识到新的工作簿价值已经丢失。由于我在工作表上有一个按钮,我添加了以下内容以尝试重新创建它,但没有运气:

Dim Newbook As New eventWB
Dim thisWB As Workbook
Set Newbook.Workbook = ActiveWorkbook
Set thisWB = Newbook.Workbook

// extra code to gather information

【问题讨论】:

  • 你是把事件代码放在新创建的工作簿的工作表模块还是ThisWorkbook模块中?
  • 你好 @ScottHoltzman 我在 eventWB.cls 模块中有代码,该模块位于新工作簿中
  • 我不是 100% 熟悉类,但是如果代码在类中,如果我在新工作簿中更改 Sheet1 上的单元格,例如 Worksheet_Change 事件如何知道触发模块?
  • 因为它在类模块中,所以我将工作簿创建为新的 eventWB。所以它不是一本普通的工作簿。每次我对单元格进行更改时,工作簿中都有这个函数,所以只要 application.enableEvents = true 它就会查找它
  • 只是为了理解,您已经创建了一个自定义类来捕获所有工作簿事件(甚至可能是您生成的自定义事件)。在您当前的(活动)工作簿中,您使用Workbooks.Add 创建一个新工作簿,然后将您的代码模块/类复制到其中。在新工作簿的工作表上,您有上面列出的代码(创建自定义事件类的对象)。如果关闭所有工作簿,然后打开宏创建的工作簿,事件将不起作用。这是正确的吗?

标签: vba excel


【解决方案1】:

我相信我找到了解决问题的方法。我能够通过在我的工作簿类中添加一个额外的 lin 来使其工作:

Public WithEvents m_events As Application

每次打开我调用的工作簿时,我都将其设置为:

Newbook.m_events = Application

它使事件再次起作用。希望这可以帮助任何有同样问题的人!再次感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多