&引用;包括「;在excelvba中?
我有一个用户表单,它由许多子表单组成,作为宏分配给工作表上的一个按钮。当用户使用完此用户表单后,他们可以按下该表单上的按钮,这会导致其可见性变为false,再次输入时,所有内容都会显示其保留状态,从而产生类似于保存的功能 我现在需要将此应用于工作表上的多个按钮,每个用户表单都需要有完全相同的代码和相同的按钮,但必须是一个单独的表单,因为每个单独的按钮都需要它自己的类似保存的功能。我计划这样做的方式是复制现有的用户表单,并使用不同的名称粘贴多次。但是,如果需要修改,则需要很长时间才能执行。因此,是否有“包括”之类的方法它可以使用一个基本模块来访问所有代码,这样如果我需要更改任何内容,我只需在一个模块上进行更改,其他所有内容都可以通过include进行更新 编辑: 我现在有一个名为costing()的公共函数,使用时出现错误:&引用;包括「;在excelvba中?,excel,vba,include,Excel,Vba,Include,我有一个用户表单,它由许多子表单组成,作为宏分配给工作表上的一个按钮。当用户使用完此用户表单后,他们可以按下该表单上的按钮,这会导致其可见性变为false,再次输入时,所有内容都会显示其保留状态,从而产生类似于保存的功能 我现在需要将此应用于工作表上的多个按钮,每个用户表单都需要有完全相同的代码和相同的按钮,但必须是一个单独的表单,因为每个单独的按钮都需要它自己的类似保存的功能。我计划这样做的方式是复制现有的用户表单,并使用不同的名称粘贴多次。但是,如果需要修改,则需要很长时间才能执行。因此,是
Private Sub material_Change()
Call costing
End Sub
您不需要“包含”(VBA中不存在);您所需要做的就是创建一个模块并将公共方法公开
例如,如果您创建一个模块并具有如下功能:
Public Function Add(first As Integer, second As Integer) As Integer
Add = first + second
End Function
然后,您可以像这样从另一个模块/表单/类模块访问它:
Sub test()
MsgBox Add(3, 6)
End Sub
同一表单可以有多个实例。可以使用此选项保留多组表单值 试试这个: 像往常一样创建表单。我们把它叫做
MyForm
在工作表上创建几个按钮。我的示例使用ActiveX按钮,但也可以使用表单控件按钮。让我们称它们为CommandButton1
和CommandButton2
在表单模块中,包含一个Terminate
子模块,其中包含此代码
Private Sub UserForm_Terminate()
' any other code you may need...
Unload Me
End Sub
需要保存/隐藏表单的表单按钮
Private Sub btnSaveAndHide_Click()
Me.Hide
End Sub
工作表按钮代码如下所示
- 每个按钮的代码都是相同的(并调用一个公共子按钮),每个按钮都有自己的
form变量。)Static
- 需要错误处理程序来处理表单未正确关闭的情况。在这种情况下,实例不再存在,但局部静态变量也不是空的
- 示例显示了显示为非模态的表单,如果需要,可以将其更改为模态
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
作为回应,我将如何从外部访问每个用户表单中的变量 在上面的示例中,
表单
实例只能在命令按钮单击处理程序例程中或表单模块本身中访问。如果可以在表单模块中编写代码,则无需更改
<>为了使表单实例在其他地方可用,请考虑将它们的声明移动到标准模块的模块范围。您可以将它们声明为,例如单个变量、数组(静态或动态)、集合、字典。哪种结构最好将取决于您希望如何管理和访问表单实例
例如,静态数组:标准模块中的代码
Option Explicit
Global MyForms(1 To 2) As MyForm
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
将命令按钮更新为
Private Sub CommandButton1_Click()
ShowMyForm Module1.MyForms(1)
End Sub
Private Sub CommandButton2_Click()
ShowMyForm Module1.MyForms(2)
End Sub
私有子ShowMyForm(frm作为MyForm)
无更改,与以前相同
代码的工作原理与以前相同,但现在可以在标准模块中访问全局变量
Option Explicit
Global MyForms(1 To 2) As MyForm
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
检查一下这个答案:还有这个:如果成本核算
是一个函数
,它会返回一些东西——对吗?例如,如果costing
返回一个数字,您可以编写MyNumber=costing
我已经尝试过了,请参见上面的编辑。我也试过“成本核算”和“成本核算()”,两次我都会出错。你真是个天才!非常感谢您提供了这一美妙而优雅的解决方案。非常感谢你的帮助!!!你已经为我做了很多,但如果你能帮我做最后一件事,我将不胜感激。我将如何从外部访问每个用户表单内部的变量,例如从模块(在您的示例中,文本框的“1”和“2”中的值)访问变量,因为通常我会指定要查看的用户表单。非常感谢。