vba中对象字典的循环

vba中对象字典的循环,vba,ms-access,Vba,Ms Access,我正在编写代码来实例化一个表单,该表单在每个实例中显示一条记录。我有使用字典打开和关闭实例的函数,但现在我需要检查记录是否已经打开 字典和集合只允许您存储成对的数据(键/项),因此创建了一个具有两个属性的类:表单对象和打开的记录id。我将键和此对象存储在字典中 现在我想检查一个记录id是否已经打开,因此我必须通过字典循环检查该项的记录id(下面代码中的servicioid)属性 课程模块: Private propFormulario As Form Private propServicioI

我正在编写代码来实例化一个表单,该表单在每个实例中显示一条记录。我有使用字典打开和关闭实例的函数,但现在我需要检查记录是否已经打开

字典和集合只允许您存储成对的数据(键/项),因此创建了一个具有两个属性的类:表单对象和打开的记录id。我将键和此对象存储在字典中

现在我想检查一个记录id是否已经打开,因此我必须通过字典循环检查该项的记录id(下面代码中的servicioid)属性

课程模块:


Private propFormulario As Form
Private propServicioId As Long

Public Property Let FormObj(frmFormObj As Form)
Set propFormulario = frmFormObj
End Property

Public Property Get FormObj() As Form
Set FormObj = propFormulario
End Property

Public Property Let servicioid(lngServicioId As Long)
propServicioId = lngServicioId
End Property

Public Property Get servicioid() As Long
servicioid = propServicioId
End Property
打开和关闭实例:

Public dicFormServicios As New Dictionary   

Public Sub AbrirServicio(lngServicioId As Long)

Dim ServicioAbierto As clsServiciosAbiertos

Set ServicioAbierto = New clsServiciosAbiertos

ServicioAbierto.FormObj = New Form_servicios2
ServicioAbierto.servicioid = lngServicioId

dicFormServicios.Add CStr(ServicioAbierto.FormObj.hwnd), ServicioAbierto
ServicioAbierto.FormObj.visible = True

End Sub

Public Sub CerrarServicio(InstanciaHwnd As Long)

If dicFormServicios.Exists(CStr(InstanciaHwnd)) Then
   dicFormServicios.Remove CStr(InstanciaHwnd)
End If

End Sub

我的问题是如何在字典中循环,以及如何检查ID是否在任何项目的servicioid属性中。

我的VBA有点生锈,因此您需要按照以下方式进行操作

dicFormServicios.Add myForm.FormId, myForm
然后要恢复值,请尝试

myReturnForm = dicFormServicios.Item("SomeFormName")
这里的细节

(上面的字典参考非常有用,但实际上……)您需要的所有对象都已经存在。您可以使用索引号直接从
表单
集合引用对象

Set myForm = Forms![0]
…或使用表单的名称

Set myForm = Forms!["myFormName"]

(我已经很久没做这些了!)

你的问题是什么?向我们展示您已经尝试解决问题/请求的代码。
Public Property不应该让FormObj
成为一个属性集(当您设置一个对象时)?要在字典中循环创建一个变量,然后在dicFormServicios中为每个变量创建一个变量。
。键
我认为您可能缺少字典的要点。使用字典的想法是,你根本不需要遍历它——你像字典一样引用它,给出你要查找的对象的名称,然后返回定义。在您的情况下,我将使用ID作为键,表单作为返回值。关于这一点,有很多种方法。Access只为任何表单或报表打开一个实例。我正在做的是跳过access实例化并创建自己的表单集合,这样我就可以无限次地实例化相同的表单。我是从@rednoise-啊!是的,非常正确(我现在又想到了!)。哦恐怖!