VBA Access检查父表单是否存在

时间:2015-09-07 08:46:49

标签: ms-access ms-access-2013

在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

5 个答案:

答案 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