【发布时间】:2018-08-25 18:14:18
【问题描述】:
我有一个表格Cases 和显示我看过的患者的会议日期。我正在尝试创建一种方法,通过该方法我可以双击任何客户的名称,它会打开一个更详细的不同表单。我希望能够对多个患者执行此操作,例如,我可以为我今天要见的客户选择并打开更详细的表格。
显示摘要详细信息的表单称为CaseAndSessionDetail,更详细的表单称为ClientDetails。
我正在使用在 windows 8.1 下运行的 Ms-Access 2010
我已经编写/复制了一个模块,我认为它应该通过使用全局变量来创建表单集合来做我想做的事情:
Option Explicit
'This holds the collection of forms as they are created
Global mcolFormInstances As New Collection
Function OpenFormInstance(FormName As String, WhereCondition As String)
'Declare for name
Dim frm As form
Select Case FormName
Case "ClientDetails"
Set frm = New Form_ClientDetails
Case Else
Debug.Assert False
End Select
If WhereCondition <> "" Then
frm.Filter = WhereCondition
frm.FilterOn = True
End If
''make the form visible
frm.Visible = True
'Need to add a reference to the form so that it does not
'immediately close when the for variable goes out of scope
mcolFormInstances.Add (frm)
End Function
如果您在最后一行 mcolFormInstances.Add(frm) 设置断点,该功能将起作用并选择并打开/显示正确的客户端详细信息表单。如果没有断点,表单将再次关闭(我怀疑是因为函数结束后变量超出了范围。
作为参考,该函数由"CaseAndSessionDetail"形式的宏调用
If Not ISNull([Screen].[ActiveControl] Then
Function OpenForm("frmContactDetails" = '"& Ltrim([Screen].[ActiveControl]) & "'")
EndIF
我怀疑我没有正确地将集合对象声明为全局变量。我尝试使用Public 和Global 在单独的模块中以两种形式声明它,但尚未成功。
我意识到我可能忽略了一些非常简单的事情,但欢迎任何帮助
【问题讨论】:
-
尝试从
mcolFormInstances.Add (frm)中删除括号。您正在强制frm传递ByVal而不是ByRef。 -
那行得通,我现在可以打开多个表单了。
标签: ms-access vba ms-access-2010