excel表格中的用户窗体 – 是否可以添加
我有一个用于生成报告的用户窗体。 如果我必须与某人共享用户表单,我将共享整个excel表单。 是否有可能使现有的用户表单成为Add-in.so,一旦安装,就可以通过打开的任何Excel表单访问,而不仅仅是该特定的Excel表单。
提前致谢。
是的,你可以,但是,你需要做一些准备。
确保您的插件有一个项目名称不同于您的工作簿的名称。 例如,如果你的用户的工作簿的Project被称为VBAProject
,那么你的加载项的项目名称必须是(而且应该被命名为更合适的东西),就像MyAddin
一样。
所以你有了:
-
Book1.xlsm
(Project name =VBAProject
)和 -
MyAddin.xlam
(项目名称MyAddin
)
脚步:
- 在Book1 / VBAProject内,向
MyAddin
添加一个引用(Tools..References)。 - 在MyAddin中,创build您的UserForm(
MyUserForm
) -
对于早期绑定,我们需要使表单实例
PublicNotCreatable
,但是VBE UI并不为表单提供该属性,所以我们需要将表单导出到文件夹,然后编辑MyUserForm.frm
文件,更改Attribute VB_Exposed
属性为True
(默认为False)。 也就是说,在文本编辑器中,编辑名为MyUserForm.frm
的导出文件并调整现有的行,如下所示:Attribute VB_Exposed = True
-
保存文件更改(删除MyAddin中的原始表单),然后将MyUserForm.frm导入到项目中。 新的用户表单将具有
PublicNotCreatable
实例。 -
将一个公共工厂函数添加到
MyAddin
,它将创build一个新的窗体实例,并将其返回给调用它的任何VBA:Public Function GetUserForm() As MyUserForm Set GetUserForm = New MyUserForm End Function
-
在
Book1.xlsm
,您现在可以编写如下所示的代码,以及完整的早期绑定支持 。Public Sub test() Dim frm As MyAddin.MyUserForm Set frm = MyAddin.GetUserForm() frm.Show End Sub
是的,你可以分享用户表单。
右键单击用户窗体并将其导出。
你可以通过导入来添加表单。
谢谢