在Excel VBA中“包含”?

用户名

我有一个由许多子程序组成的用户窗体,该窗体作为宏分配给工作表上的按钮。当用户完成此用户表单后,他们可以按其上的按钮,这将导致其可见性变为假,并且再次输入时,所有内容都会以其保留方式出现,从而导致类似保存的功能。

现在,我需要将其应用于工作表上的多个按钮,每个用户表单都需要具有完全相同的代码和相同的按钮,但是要成为单独的表单,因为每个单独的按钮都需要具有自己的保存类似功能。我打算这样做的方法是复制现有的用户表单并用不同的名称多次粘贴它,但是,如果需要修改,则将花费很长时间来执行,因此是否有诸如“ include”之类的方法哪个可以使用可访问所有代码的基本模块,以便如果我需要更改任何内容,只需在该模块上进行操作,其他所有内容都可以通过include进行更新?

编辑:

我现在有一个名为costing()的公共函数,使用时遇到错误:

Private Sub material_Change()
Call costing
End Sub
克里斯·尼尔森

您可以具有相同表单的多个实例。您可以使用它来保留多组表单值

试试这个:

照常创建表单。叫它吧MyForm

在工作表上创建几个按钮。我的示例使用ActiveX按钮,但也可以使用“表单控制”按钮。让我们称他们CommandButton1CommandButton2

在表单模块中,包括一个TerminateSub,其中包含以下代码

Private Sub UserForm_Terminate()
    '  any other code you may need...
    Unload Me
End Sub

保存/隐藏表单的表单按钮需要

Private Sub btnSaveAndHide_Click()
    Me.Hide
End Sub

表格按钮代码如下

  • 每个按钮的代码都是相同的(并调用一个公共Sub),每个按钮都有自己的Staticform变量。)

  • 需要错误处理程序来处理未正确关闭表单的情况。在这种情况下,实例不再存在,但是本地Static变量也不是Nothing

  • 示例显示的表单显示为“无模式”,您可以根据需要将其更改为“模态”。

     Private Sub CommandButton1_Click()
         Static frm As MyForm
         ShowMyForm frm
     End Sub
    
     Private Sub CommandButton2_Click()
         Static frm As MyForm
         ShowMyForm frm
     End Sub
    
    
     Private Sub ShowMyForm(frm As MyForm)
         If frm Is Nothing Then Set frm = New MyForm
    
         On Error GoTo EH
         frm.Show vbModeless
     Exit Sub
     EH:
         If Err.Number = -2147418105 Then
             On Error GoTo 0
             Set frm = Nothing
             Set frm = New MyForm
             frm.Show
         End If
         On Error GoTo 0
     End Sub
    

最终结果:多个相同格式的副本,每个副本都有自己的值

在此处输入图片说明


作为回应,我将如何在外部访问每个用户表单内部的变量

在上面的Form示例中,只能在“命令按钮单击处理程序”例程中或在Form模块本身中访问实例。如果您可以在表单模块中编写代码,则无需进行任何更改。

要使Form实例在其他地方可用,请考虑将其声明移至标准模块的模块范围。您可以将它们声明为例如单个变量,数组(静态或动态),集合,字典。哪种结构最好取决于您如何管理和访问表单实例。

例如,标准模块中的“静态数组:代码”

Option Explicit
Global MyForms(1 To 2) As MyForm

CommandButton代码更新

Private Sub CommandButton1_Click()
    ShowMyForm Module1.MyForms(1)
End Sub
    
Private Sub CommandButton2_Click()
    ShowMyForm Module1.MyForms(2)
End Sub

Private Sub ShowMyForm(frm As MyForm) 没有变化,和以前一样

该代码的工作原理与以前相同,但是您现在可以在标准模块中访问Global变量。

Sub Demo()
    Dim i As Long
    
    For i = LBound(MyForms) To UBound(MyForms)
        If Not MyForms(i) Is Nothing Then
            MsgBox "Form " & i & " Value = " & MyForms(i).TextBox1.Value
        End If
    Next
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

VBA Excel中的VBA DateValue()中的错误?

通过VBA包含双引号的Excel公式

如何检查Excel单元格是否包含REF!VBA中的错误

另存为不接受包含“。”的字符串。在Excel VBA中

使用Excel VBA在Outlook中添加包含图像的默认签名

Excel VBA将正文包含在转发的Outlook电子邮件中

Excel VBA中的计算

VBA中的Excel公式

在Excel VBA中遍历表格

Excel VBA计算包含特定值的行

如何使用包含方括号数组的Excel单元格中的值初始化VBA中的数组?

验证是否xls文件包含VBA宏而不在MS Excel中打开它

在Excel VBA中循环

删除包含excel vba的行

包含计算值的Excel VBA格式页脚

使用VBA是否可以在多个工作表中包含Excel的规划求解参考单元?

Excel VBA中的Vlookup

在VBA中,如何将整个excel表存储到包含所有相关子信息的易于访问的数组中?

如何使用Excel VBA删除第一列中包含特定代码的行?

Excel VBA:如果列A包含字符串中的数字,则删除行

使用 Excel VBA 检查字符串是否在数组中或不包含通配符

VBA在包含定义变量的单元格中编写excel函数

Excel VBA匹配以查找与数组中包含的多个条件匹配的第一行号

Excel VBA,列列表中包含“IS”和“S”的第一个单元格中的颜色

VBA for excel,包含条件

使用 Excel VBA 向多个用户发送包含表中相应信息的电子邮件

获取名称中包含 unicode 字符的文件的文件大小 (FileLen() [Excel VBA]

包含包含的 Excel VBA SQL 語句

如何使用公式或宏/VBA 自动将包含日期的行中的数据重新排列到 Excel 中的季度列