如何根据来自两个组合框的输入隐藏/取消隐藏子表单?

问题描述

我有一个主窗体,叫做 TrainingsSU 在其中我调用子表单 qry_TrainingSU(从同名查询构建) 我进行了设置,以便记录根据主表单中的两个组合框自动填充子表单。

但是我需要做的是隐藏子表单,并且仅在填充两个组合框并加载记录时才显示它。

这是当前的 VBA(我什至不是新手)

Private Sub cbo_EmployeeLookup_AfterUpdate()

    Me!qry_TrainingsSU.Requery
    
    If Me.cbo_EmployeeLookup.Value = "" Then
        Forms!qry_TrainingsSU.Visible = False
    Else
        Forms!qry_TrainingsSU = True
    End If
        
End Sub

Private Sub cbo_TrainingName_AfterUpdate()
     
     Me!qry_TrainingsSU.Requery
     
     If Me.cbo_TrainingName.Value = "" Then
        Forms!qry_TrainingsSU = False
    Else
        Forms!qry_TrainingsSU.Visible = True
    End If
    
End Sub

我在另一个答案中找到了这段代码的一般形式,这里:MS Access: Hide and Unhide subform based on drop down in Main Form 但是代码似乎对我不起作用。

当前子窗体设置为可见:否 所以什么都没有出现。 如果我更改它,它不会消失并且空子表单仍然可见。 这不是问题,除非我需要将此表单用于另一个查询,并希望在第二个子表单准备好使用时将它们分层。

稍后将使用此表单将 UPDATE SET 推送到基于不同子表单的表。

代码是否有明显错误,或者我是否遗漏了某处的设置?

解决方法

你可以试试这个:

Private Sub updateStates()

    Me!qry_TrainingsSU.Form.Requery    

    If (Me.cbo_EmployeeLookup.Value <> "" AND Me.cbo_TrainingName.Value <> "") Then
      Me!qry_TrainingsSU.Visible = True
    Else
      Me!qry_TrainingsSU.Visible = False
    End If
       
End Sub

Private Sub cbo_EmployeeLookup_AfterUpdate()
    updateStates
End Sub

Private Sub cbo_TrainingName_AfterUpdate()    
    updateStates    
End Sub

Forms!qry_TrainingsSU 搜索作为主表单打开的表单,而不是子表单。