我有一个用于生成报告的用户表单。 如果我必须与某人共享用户表单,我会共享整个 Excel 工作表。 是否可以将现有的用户表单作为加载项。这样,一旦安装,就可以通过任何打开的 Excel 工作表进行访问,而不仅仅是特定的 Excel 工作表。
提前致谢。
最佳答案
是的,可以,但是,您需要做一些准备。
确保您的外接程序的项目名称与工作簿的名称不同。例如,如果您的用户工作簿的项目名为 VBAProject
,则您的外接程序的项目名称必须是(并且应该命名为更合适的名称)类似 MyAddin
的名称。
所以,你有:
Book1.xlsm
(项目名称 =VBAProject
),以及MyAddin.xlam
(项目名称MyAddin
)
步骤:
- 在 Book1/VBAProject 中,添加对
MyAddin
的引用(Tools..References)。 - 在 MyAddin 中,创建您的用户表单 (
MyUserForm
) 对于早期绑定(bind),我们需要使表单实例化
PublicNotCreatable
,但 VBE UI 不为表单提供该属性,因此我们需要将表单导出到文件文件夹,然后编辑MyUserForm.frm
文件,将Attribute VB_Exposed
属性更改为True
(默认情况下为 False)。也就是说,在文本编辑器中,编辑名为MyUserForm.frm
的导出文件并调整现有行,如下所示:Attribute VB_Exposed = True
保存文件更改(删除MyAddin中的原始表单),然后将MyUserForm.frm导入到项目中。新的用户表单将具有
PublicNotCreatable
实例。向
MyAddin
添加公共(public)工厂函数,该函数将创建表单的新实例,并将其返回给调用它的任何 VBA:Public Function GetUserForm() As MyUserForm Set GetUserForm = New MyUserForm End Function
在
Book1.xlsm
中,您现在可以编写如下代码,以及完整的早期绑定(bind)支持。Public Sub test() Dim frm As MyAddin.MyUserForm Set frm = MyAddin.GetUserForm() frm.Show End Sub
关于excel - excel表格中的用户表单-可以添加吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45231935/