【问题标题】:Workbook_Open() in Excel 2016 not firingExcel 2016 中的 Workbook_Open() 未触发
【发布时间】:2017-12-18 20:42:42
【问题描述】:

Excel 2016(或 365)似乎没有可靠地或更准确地触发 Workbook_Open() 子,根本没有! 简单的事件子

Private Sub Workbook_Open()
    MsgBox "Work book is open"
End Sub

似乎不起作用。但是,如果一个工作簿已经打开,然后包含上述 Sub 的工作簿被打开,它会按预期运行。 我注意到与 Excel 2010 不同,2016 (365) 在其自己的窗口中打开每个工作簿,而不是在 Excel 应用程序窗口中打开工作簿窗口。这是 2016 年的错误吗?有解决方法吗?

我为自己的应用程序制作了一个解决方法,即调用工作表的激活并从那里调用我的初始化例程。但是有点“粗糙”,让 Workbook_Open() 子正常工作会很好。

它是 ThisWorkbook 模块中的一个简单的单个 Sub。启用宏。在 Excel 2010 中,它可以完美运行,就像我为其编写宏的其他工作簿中的其他两个宏一样。这只是 Excel 2016 的一件事。鉴于 Workbook_Open() 子是通向工作簿的网关,我们必须找到一种解决方法才能使其正常工作似乎有点奇怪。

【问题讨论】:

  • (a) 我创建(使用 Excel 2016)一个带有 Workbook_Open 宏的工作簿,保存它(启用宏),关闭 Excel,在 Windows 资源管理器中双击文件,然后宏触发OK(当然在我选择“启用宏”之后)。 (b) 现在的默认行为是在 Excel 的一个实例中打开新工作簿,但窗口不会“锁定”在一起 - 即不受单个矩形边框的约束。窗口不受相同边框约束的事实不应该(AFAIK)影响它们的操作方式。 (并且有一种解决方法可以打开新的 Excel 实例。)
  • SDI(单文档界面)于2013年推出msdn.microsoft.com/VBA/Excel-VBA/articles/…
  • 您是从另一个工作簿的 VBA 代码打开此工作簿吗?

标签: excel vba


【解决方案1】:

尝试用新的 Excel 实例封装调用。下面的例子:

     Sub OpenInNewExcel()

        Dim Background_Excel As Excel.Application
        Dim pathName As String
        Dim fileName As String

        Let pathName = "Enter your path here" 'include "\" at the end
        Let fileName = "Enter your file name here"

        Background_Excel.Workbooks.Open fileName:=pathName & fileName



        Background_Excel.Parent.Quit ' This is how you close the file completely using VBA otherwise the file will close and the Excel Shell will remain.


    End Sub

还要确保在 Options-Trust Center 中启用了启用宏。

【讨论】:

  • 不幸的是,当您希望通过任务计划程序或“手动运行通过Workbook.Open 事件打开目标工作簿的子例程”之外的其他方法自动打开目标工作簿时,这没有用跨度>
【解决方案2】:

您必须将工作簿的文件/文件夹位置添加为“受信任位置”。

您可以在Designate trusted locations for files in Office 2016 中查看更多相关信息。

【讨论】:

    【解决方案3】:

    我有同样的问题,然后我在谷歌后找到了解决方案: https://www.myonlinetraininghub.com/excel-forum/vba-macros/excel-2016-workbook_open-event-doesnt-trigger

    然后我还使用在 excel 2016 中打开的“Private Sub Workbook_Open()”和“Public Sub Auto_Open()”,它们工作正常:

    Private Sub Workbook_Open()
        CustomStartUp
    End Sub
    
    Public Sub Auto_Open()
        CustomStartUp
    End Sub
    
    
    Private Sub CustomStartUp()
        MsgBox "Work book is open"
    End Sub
    

    【讨论】:

      【解决方案4】:

      我遇到了这个问题(我使用的是 Microsoft 365),我找到了这个帖子。

      当我已经打开另一个工作簿时,有时会发生这种情况,然后在尝试打开启用宏的工作簿时,在显示任何工作表之前,我收到有关宏的 Microsoft 警告消息。然后,虽然我点击了它的“启用”按钮,但工作簿打开了,宏确实被启用了,但是 Workbook_Open 没有运行。

      我从来不知道如果没有打开其他工作簿会出现问题。 (当然,用户可能仍会在工作簿顶部看到黄色背景消息,要求他们单击启用编辑和/或启用宏按钮。)

      请注意,我的 Workbook_Open 只是调用模块中的另一个“工作簿打开”子来完成所有打开处理。

      我的解决方案:当我的工作簿打开子被调用时,它将一个全局变量设置为 True 以指示它已经运行。

      我已通过锁定所有单元格的“欢迎”表向用户表明问题已发生,因此用户无能为力;此时所有其他工作表都非常隐藏。工作簿打开子程序在运行时会停用此工作表并使其非常隐藏,因此用户通常不会看到它,并使其他工作表可见。但是如果这个屏幕仍然存在,它会指示用户选择另一个工作簿,然后再次选择这个工作簿。然后我的 Workbook_Activate 代码运行,并且由于全局变量不是 True,它调用了工作簿打开子。如果这个全局变量是 True,它什么也不做。

      为了完成这项工作,Workbook_Close 子项使其他工作表非常隐藏,而 Welcome 工作表可见,为下次打开工作簿时做好准备。

      你好,问题解决了。

      欢迎表实际上有双重用途,即如果显示任何一个黄底警告消息,它将保留并强制用户在适当的说明下单击启用编辑和/或启用宏。如果用户不熟悉启用宏的 Excel,他们将忽略这些并尝试继续进行。

      所有这些都比解释更容易实现。我希望它很清楚。

      我希望这可能对某人有所帮助。

      【讨论】:

        【解决方案5】:

        我的一个文件也有这个问题。我设法通过在 VBA 编辑器中手动运行 Workbook_Open 来解决这个问题,一旦打开并将文件保存在另一个位置。新位置的文件在自动运行 Workbook_Open 时应该没有问题。如果这不起作用,请在手动运行和保存之前将原始文件复制到新位置。

        如果新保存的文件没有运行 Workbook_Open,请修复您的 Office 版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多