我有一个由许多子程序组成的用户窗体,该窗体作为宏分配给工作表上的按钮。当用户完成此用户表单后,他们可以按其上的按钮,这将导致其可见性变为假,并且再次输入时,所有内容都会以其保留方式出现,从而导致类似保存的功能。
现在,我需要将其应用于工作表上的多个按钮,每个用户表单都需要具有完全相同的代码和相同的按钮,但是要成为单独的表单,因为每个单独的按钮都需要具有自己的保存类似功能。我打算这样做的方法是复制现有的用户表单并用不同的名称多次粘贴它,但是,如果需要修改,则将花费很长时间来执行,因此是否有诸如“ include”之类的方法哪个可以使用可访问所有代码的基本模块,以便如果我需要更改任何内容,只需在该模块上进行操作,其他所有内容都可以通过include进行更新?
编辑:
我现在有一个名为costing()的公共函数,使用时遇到错误:
Private Sub material_Change()
Call costing
End Sub
您可以具有相同表单的多个实例。您可以使用它来保留多组表单值
试试这个:
照常创建表单。叫它吧MyForm
在工作表上创建几个按钮。我的示例使用ActiveX按钮,但也可以使用“表单控制”按钮。让我们称他们CommandButton1
与CommandButton2
在表单模块中,包括一个Terminate
Sub,其中包含以下代码
Private Sub UserForm_Terminate()
' any other code you may need...
Unload Me
End Sub
保存/隐藏表单的表单按钮需要
Private Sub btnSaveAndHide_Click()
Me.Hide
End Sub
表格按钮代码如下
每个按钮的代码都是相同的(并调用一个公共Sub),每个按钮都有自己的Static
form变量。)
需要错误处理程序来处理未正确关闭表单的情况。在这种情况下,实例不再存在,但是本地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] 删除。
我来说两句