我有一个主要形式MYMAIN,其中有两个子形态MYSUBONE和MYSUBTWO。
我在每个子表单中都有“on current”事件,用于更新另一个子表单中的文本框。
我的问题出现在加载表单时。加载子表单“MYSUBONE”时(在加载“MYSUBTWO”之前)触发“on current”事件,并且它尝试更新尚未加载的MYSUBTWO中的文本框。因此在事件过程中触发错误。
如何检查我的“当前”事件过程(在VBA中?),以便MYSUBONE检查MYSUBTWO子窗体是否尚未加载。
导通电流-mysubone 如果没有加载mysubtwo那么 更新mysubtwo.textbox = ... 结束如果
我在示例数据库“Northwind”中尝试了“Isloaded”功能,但似乎不起作用。 如何检查子表单是否尚未加载?
或者我可以忽略错误并使用类似“if error,exit function”的内容吗?
答案 0 :(得分:4)
解决此问题的一种可能方法是确保您知道子窗体的加载顺序。您可以通过解除子窗体控件的绑定然后手动加载它们来实现此目的。以下是如何做到这一点:
添加VBA以在父窗体打开时手动绑定控件:
Private Sub Form_Open(Cancel As Integer)
Me.sfB.SourceObject = "FormB"
Me.sfA.SourceObject = "FormA"
End Sub
答案 1 :(得分:0)
在打开主窗体之前实际打开子窗体(包括所有的OnCurrent事件)。我认为你不能保证他们加载了哪个订单。
我会解决问题,并从主窗体进行更新。如果您确实需要从子表单进行更新,请将更新移至MySubOne
中的单独函数。然后在主窗体的OnCurrent中,调用MySubOne
中的函数。这样可以保证MySubOne
和MySubTwo
都已加载。
答案 2 :(得分:0)
不知道它是否有用,但值得一提...... 我展示了两个有亲子关系的网格。但是,第二个网格会立即显示与第一个网格中的所有父记录关联的所有子记录。当在第一个网格中选择一个记录时,我想在第二个网格中找到第一个相应的子记录。我遇到了同样的问题,因为第二个网格(子窗体)记录集在最初打开主窗体时失败,因为尚未显示第二个网格。我的解决方法包括捕获错误2455并忽略它,因此它有机会继续,直到第二个网格完全显示。
Private Sub Form_Current()
Dim rsResults As Recordset
Dim stFilter As String
On Error GoTo ErrHdlr
'Locate first results record associated to current requisition
Set rsResults = Me.Parent.sfResults.Form.Recordset
stFilter = obRecord.GetFilter(Me.Recordset, vrPKFields, vrPKTypes)
rsResults.FindFirst (stFilter)
Exit Sub
ErrHdlr:
If Err.Number = 2455 Then
Exit Sub 'When this sub form is first displayed, Current event
'tries to reference another subform on the same parent.
'However, such second subform is not yet open and
'reference fails. This is the error number raised,
'so it is ignored on purpose. After second subform
'is displayed, code works correctly.
'It had to be handled this way because there's no way
'to know in advance whether subform is already open.
Else
msgbox Err.number & " " & err.description
endif
exit sub
答案 3 :(得分:-1)
“有没有办法检查检索到的子表单记录计数是否为0”
if forms!myMainForm!mySubForm.form.RecordsetClone.RecordCount = 0 then....