vba - Excel Addin 自动化运行问题

标签 vba excel

当前进度:

我创建了一个 Excel 宏来保护/取消保护客户的工作簿。由于每次打开和关闭工作簿时都需要运行宏,因此 Excel 加载项似乎是最可行的。问题在于它们的文件结构的设计方式。此需要处理的 Excel 文件数量约为 900 个。因此,为每个文件使用 Workbook_Open() 并不可行。

我转到“开发人员”选项卡,选择“Excel 加载项”,然后选择“自动化”(文件 -> 选项 -> 加载项 ->“Excel 加载项”,然后选择... -> 自动化)。我看到了一个项目列表,但根据我的理解,没有任何与此加载项相关的内容。

问题:

  • 最好有办法在每次打开和关闭工作簿时自动执行此加载项吗?
  • 如果必须手动完成加载项,则应如何为用户实现?
  • 如何使用自动化?它提供了哪些我不理解的自动化功能?

其他详细信息:

  • 客户有多人访问文件,需要为他们保护文件。

解决方案:

ThisWorkbook 模块中的解决方案。

Option Explicit

'Key Variable
Private XLApp As ProtectUnprotect

'Initializing
 Private Sub Workbook_Open()
    Set XLApp = New ProtectUnprotect
 End Sub

ProtectUnprotect 类模块的解决方案。

Private WithEvents App As Application

Private Sub Class_Initialize()
    Set App = Application
End Sub

'Unprotecting Workbook
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    Stop
    '-- Code to run here
End Sub

最佳答案

为了在任何工作簿打开时运行,您需要捕获应用程序对象并向其附加一个事件。

这个例子来自 Chip Pearson: http://www.cpearson.com/excel/AppEvent.aspx

Private WithEvents App As Application

Private Sub ProtectUnprotect_Initialize()
    Set App = Application
End Sub 

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    ' ---Put your code here---
End Sub

要使其正常工作,请将代码放入“类模块”中,并更改 Private Sub ProtectUnprotect_Initialize() 行以使用您为类模块指定的名称。它必须与模块名称完全匹配,因为您要重写模块的“_Initialize”方法。

完成后,将工作簿保存为插件。为了向客户进行部署,我建议制作一个执行所有设置步骤的安装程序。否则,部署到多台机器上的用户体验将会很差。

以下是如何制作和安装插件的示例: https://www.fontstuff.com/vba/vbatut03.htm

关于vba - Excel Addin 自动化运行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51140593/

相关文章:

vba - If 或语句始终为真

excel - 如何使 Excel 用户窗体在基于单元格值时只显示一次

vba - 如何显示hh :mm:ss in Excel?

excel - 使用 worksheet_change 代码创建 Excel 工作表

java - Grails:Excel 导出 .xlsx 样式问题,打开文件时出现错误消息

sql - 如何在带有 ADO 的 excel 中使用 sql/VBA 创建表

vba - Excel 2016 VBA 宏在更新 1705 后插入新列时中断

php - 我如何增加单元格 A1 :H1 in php excel 的高度

c# - 从 C# 读取 Excel 文件

c# - 动态解析 Excel 工作表(未提供单元格范围,因为数据在工作表中的位置可能会动态变化)