在MS Acces中我从另一个Dialog表单打开一个Dialog Form。
所以formA
,打开formB
。但是他们可以单独打开formB
用户,我希望避免在这种情况下出错。
我考虑过检查formB
的现有父级。
但是当我这样做时,我仍然得到错误2452:您输入的表达式对Parent属性无效。
我试过了:
If Not IsError(Me.Parent) Then
Me.Parent.cboTraining.Requery
End If
和
If Not IsNull(Me.Parent) Then
Me.Parent.cboTraining.Requery
End If
答案 0 :(得分:4)
您可以使用以下方式测试表单是否已打开:
jQuery('#search-submit').click(function() {
if (jQuery('.elm1.include, .elm2.include, .elm3.include').length == 3){
/* return true */
} else {
/* return false */
}
});
或者,当您从formA打开formB时,您可以提供一个openArg,这很容易测试。
答案 1 :(得分:1)
有时我的子表单是从多种表单中调用的,因此我基于捕获错误的简单思想在ss_utilities模块中添加了一个泛型函数:
Public Function hasParent(ByRef p_form As Form) As Boolean
'credit idea from https://access-programmers.co.uk/forums/showthread.php?t=157642
On Error GoTo hasParent_error
hasParent = TypeName(p_form.Parent.Name) = "String"
Exit Function
hasParent_error:
hasParent = False
End Function
因此原始问题的代码为:
If ss_utilities.hasParent(Me) Then
Me.Parent.cboTraining.Requery
End If
答案 2 :(得分:0)
要找到任何独立的公开表格,请尝试以下方法:
Sub test()
Dim i
For i = 0 To Forms.Count - 1
Debug.Print Forms.Item(i).Name
If Forms.Item(i).Name Like "formA" Then MsgBox "It's Open"
Next i
End Sub
答案 3 :(得分:0)
这是另一个例子。
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
MC_FormIsLoaded = True
End If
End Ifere
答案 4 :(得分:0)
此方法类似于上面的方法:https://stackoverflow.com/a/53582533/4924078
Public Function hasParent(F As Object) As Boolean
'Inspired from: https://access-programmers.co.uk/forums/showthread.php?t=293282 @Sep 10th, 2019
Dim bHasParent As Boolean
On Error GoTo noParents
bHasParent = Not (F.Parent Is Nothing)
hasParent = True
Exit Function
noParents:
hasParent = False
End Function
旨在更通用,可以从两个子表单/子报表中调用,如下所示:
If hasParent(Me) Then
msgbox "Has Parent :)"
Me.Parent.text1 = "Yes"
else
msgbox "NO PARENTS .. :("
endif