【问题标题】:Run AfterUpdate after a control is updated by combo box在组合框更新控件后运行 AfterUpdate
【发布时间】:2019-11-30 19:51:44
【问题描述】:

我有一个名为 Product Master Data 的表,其中包含 785 条记录。

我有一个基于此表的表单,名为Production。此表单上的第一个文本控件称为Protean Resource,是对应于各个记录的标识符。

我将此控件设置为组合框,一旦选择了资源编号,表单上的其余文本控件就会自动更新以显示所选记录的准确信息。

其中一个自动更新的控件称为Quality Format

Quality Format 可以填充:

  • SG Industrial
  • LG Industrial
  • SG Retail Carton
  • LG Retail Carton

这些值中的每一个都对应于单独的表单。

我正在尝试为Quality Format 设置AfterUpdate 事件,以便在自动填充控件后,相应的表单将自动打开。

Private Sub QualityFormat_AfterUpdate()
    Select Case Me.QualityFormat
        Case "QualityFormat= SG Industrial"
            DoCmd.OpenForm FormName:="SGIndustrial"
        Case "QualityFormat= LG Industrial"
            DoCmd.OpenForm FormName:="LGIndustrial"
        Case "QualityFormat= SG Retail Carton"
            DoCmd.OpenForm FormName:="SGRetailCarton"
        Case "QualityFormat= LG Retail Carton"
            DoCmd.OpenForm FormName:="LGRetailCarton"
    End Select
End Sub

我没有收到任何错误消息,但更新 Quality Format 后什么也没有发生。

【问题讨论】:

    标签: vba ms-access ms-access-forms


    【解决方案1】:

    由于您没有收到任何错误消息,也没有看到任何操作,我怀疑您的 select case 表达式中没有任何 case 语句正在验证。

    我看到您在每个 case 语句前加上 QualityFormat = 前缀,这不是必需的,如果不等于组合框控件返回的值,将导致验证失败。

    我怀疑以下将按预期运行:

    Private Sub QualityFormat_AfterUpdate()
        Select Case Me.QualityFormat
            Case "SG Industrial"
                DoCmd.OpenForm "SGIndustrial"
            Case "LG Industrial"
                DoCmd.OpenForm "LGIndustrial"
            Case "SG Retail Carton"
                 DoCmd.OpenForm "SGRetailCarton"
            Case "LG Retail Carton"
                 DoCmd.OpenForm "LGRetailCarton"
        End Select
    End Sub
    

    如果删除多余的前缀没有解决问题,接下来要检查的是 Me.QualityFormat 返回的实际值 - 取决于绑定的列对于组合框,这可能会返回一个 ID 而不是您所期望的描述。

    您可以通过在代码的开头添加Debug.Print 来检查这一点,以便您可以在更改其值时验证此控件返回的值,也可以添加默认的case 以便您可以验证没有验证之前的 case 语句。


    值得补充的是,如果您有一个每个可用选项的表单,那么由于您的命名约定,您的代码可以简化为:

    Private Sub QualityFormat_AfterUpdate()
        If Not IsNull(Me.QualityFormat) Then
            DoCmd.OpenForm Replace(Me.QualityFormat, " ", "")
        End If
    End Sub
    

    【讨论】:

    • 谢谢!很有帮助
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多