当前进度:
我创建了一个 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/