打开文件时在excel插件(xlam)中执行操作

时间:2019-03-28 10:21:56

标签: excel vba

我正在构建一个外接程序来处理一个非常烦人的外部提供的文件。打开该文件时,它会做很多令人讨厌的事情,将其中的功能区隐藏起来。我想阻止这种行为。是的,可以通过其他方式实现,但我希望将其集成到插件中-与工作表交互的用户非常老练-打开文件时按Shift的操作太复杂了,我们也希望文件中的其他宏才能正常运行。

所以,问题:

  1. xlam插件是否可以知道何时打开文件,然后执行某些功能
  2. xlam加载项是否有可能在打开Excel后每隔10秒执行一些功能? (不太好的解决方案)

1 个答案:

答案 0 :(得分:2)

可能是的。您可以执行以下操作:

在名为AppEvents的新类模块中,放置以下代码:

Option Explicit
Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    MsgBox "Hello new workbook!"
    'do whatever else you'd rather do here
End Sub

Private Sub Class_Terminate()
    Set App = Nothing
End Sub

如果要检测新的工作簿以及打开已经创建的工作簿,则也需要添加它:

Private Sub App_NewWorkbook(ByVal Wb As Workbook)
    MsgBox "Hello new workbook!"
    'do whatever else you'd rather do here
End Sub

然后在模块中,我们需要创建一个模块级变量来保存事件处理程序,并创建一个可以设置此模块变量的函数:

Option Explicit

Dim EventHandler As AppEvents

Sub InitHandler()
    Set EventHandler = New AppEvents
    Set EventHandler.App = Application
End Sub

最后,我们需要向XLAM插件的thisworkbook部分添加一个函数:

Private Sub Workbook_Open()
    Call InitHandler
End Sub

说明

这种工作方式是,当在Excel中打开工作簿时,只要XLAM加载项也被打开,就会调用workbook_open例程。这样会在公共模块中初始化事件处理程序,从而捕获应用程序调用。

拥有该类的唯一原因是我们需要将具有事件的变量放入类模块中。

我使用this short article捕获打开事件来编写它。希望这会有所帮助。