使用表单名称
创建已关闭表单的新表单实例的代码我想用变量替换长的Select Case列表。
在Access 2010中,我有一个VBA函数,在给定包含表单名称的字符串时打开表单的新实例。通过向集合添加表单变量“frm”:
mcolFormInstances.Add Item:=frm, Key:=CStr(frm.Hwnd)
我可以想出打开“frm”的唯一方法是使用我手动输入的Select Case语句。
Select Case strFormName
Case "frmCustomer"
Set frm = New Form_frmCustomer
Case "frmProduct"
Set frm = New Form_frmProduct
... etc ... !
End Select
我想让它自动完成,有点像这样(虽然这不起作用):
Set frm = New Eval("Form_" & strFormName)
或通过一些代码:
For Each obj In CurrentProject.AllForms 'or AllModules, neither work
If obj.Name = strFormName Then
Set FormObject = obj.AccessClassObject 'or something
End If
Next
Set frm = New FormObject
我只是想避免列出项目中的每一个表单,并且在添加新表单时必须更新列表。
答案 0 :(得分:3)
我也做了一些我自己的测试,还有一些在线阅读。就像我所知,不可能创建一个新的表单对象,并使用表示该表单名称的字符串将其设置为现有表单的实例,而不使用DoCmd.OpenForm。
换句话说,除非别人能证明我错了,否则你要做的就是做不了。
答案 1 :(得分:1)
我认为你正在寻找像这样的MS-Access 2010功能。 (GetForm sub仅用于测试):
Function SelectForm(ByVal FormName As String, ByRef FormExists As Boolean) As Form
For Each f In Application.Forms
If f.Name = FormName Then
Set SelectForm = f
FormExists = True
Exit Function
End If
Next
FormExists = False
End Function
Sub GetForm(ByVal FormName As String)
Dim f As New Form
Dim FormExists As Boolean
Set f = SelectForm(FormName, FormExists)
If FormExists Then
MsgBox ("Form Found: " & f.Caption)
Else
MsgBox ("Form '" & FormName & "' not found.")
End If
End Sub
答案 2 :(得分:1)
我发现这是一个丑陋的黑客:
DoCmd.SelectObject <acObjectType>, <YourObjectsName>, True
DoCmd.RunCommand acCmdNewObjectForm
RunCommand步骤不会为您提供对象的编程控制,您必须使用Forms.Item()对Dim表格变量和Set进行调整。我通常在DoCmd.RunCommand之后关闭表单,然后在DoCmd.Rename之后关闭一些有用的东西(我的用户不喜欢Form1,Form2等)。
希望有所帮助。