excel - excel表格中的用户表单-可以添加吗

标签 excel vba userform

我有一个用于生成报告的用户表单。 如果我必须与某人共享用户表单,我会共享整个 Excel 工作表。 是否可以将现有的用户表单作为加载项。这样,一旦安装,就可以通过任何打开的 Excel 工作表进行访问,而不仅仅是特定的 Excel 工作表。

提前致谢。

最佳答案

是的,可以,但是,您需要做一些准备。

确保您的外接程序的项目名称与工作簿的名称不同。例如,如果您的用户工作簿的项目名为 VBAProject,则您的外接程序的项目名称必须是(并且应该命名为更合适的名称)类似 MyAddin 的名称。

所以,你有:

  • Book1.xlsm(项目名称 = VBAProject),以及
  • MyAddin.xlam(项目名称MyAddin)

步骤:

  1. 在 Book1/VBAProject 中,添加对 MyAddin 的引用(Tools..References)。
  2. 在 MyAddin 中,创建您的用户表单 (MyUserForm)
  3. 对于早期绑定(bind),我们需要使表单实例化 PublicNotCreatable,但 VBE UI 不为表单提供该属性,因此我们需要将表单导出到文件文件夹,然后编辑 MyUserForm.frm 文件,将 Attribute VB_Exposed 属性更改为 True(默认情况下为 False)。也就是说,在文本编辑器中,编辑名为 MyUserForm.frm 的导出文件并调整现有行,如下所示:

    Attribute VB_Exposed = True
    
  4. 保存文件更改(删除MyAddin中的原始表单),然后将MyUserForm.frm导入到项目中。新的用户表单将具有 PublicNotCreatable 实例。

  5. MyAddin 添加公共(public)工厂函数,该函数将创建表单的新实例,并将其返回给调用它的任何 VBA:

    Public Function GetUserForm() As MyUserForm
      Set GetUserForm = New MyUserForm
    End Function
    
  6. 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/

相关文章:

python - 在工作表之间切换

excel - 如何在循环范围时从另一列获取相应的单元格

VBA:单击元素后无法更改图像控制图片

excel - 标签 vba excel 的手形光标

vba - UserForm.Caption 有什么问题?

arrays - 无法将值存储在数组中

vba - 在 MS Word 中打印字体的所有字形

vba - 获取图片的大小

vba - 在VBA中设置字体颜色

vba - 如何选择Excel单元格范围仅跟随字母?