首页 > 解决方案 > 获取 MS-Access 表单以在查询和表中将不可见的组合框保存为 null 或 0 值

问题描述

我不知道我如何构建我的表单一定是我能做到的最好的方式,但这是我可以让它工作的方式,至少部分。我在 ms-access 2007 中构建了一个表单,它使用 vba 来隐藏或使某些组合框可用。第一个选择和表单其余部分所基于的是一个是/否选项,即客户是否需要外部服务来完成他们的工作。一旦选择了该选项,用户就可以从外部服务选项中进行选择(哪些是组合框,根据第一选择可见或不可见)。所以这就是问题所在,我编写了代码,这样如果用户在第一个框中选择“否”,则其余框将不可见。但是,如果用户选择是,则他们必须选择值,再次是或否,以保留或删除表格其余部分的其他选项。我要做的是让用户返回表单时,他们所做的选择仍然存在。因此,如果他们选择“否”,那么该表格基本上是空白的,如果他们最初说“是”,那么该答案以及他们做出的其他选择将可用。

我目前使用的是一个简单的 if-then 语句来使框可见或不可见。

Private Sub Combo36_AfterUpdate()
    If Combo36.Value = "No" Then Me.Combo18.Visible = False
    If Combo36.Value = "Yes" Then Me.Combo18.Visible = True
    If Combo36.Value = "No" Then Me.Combo20.Visible = False
    If Combo36.Value = "Yes" Then Me.Combo20.Visible = True
End Sub

显然,我对访问没有经验,并且跌跌撞撞地通过它。如果我上面所说的任何内容令人困惑,我很抱歉。如果需要澄清,请告诉我。

标签: vbaif-statementcomboboxms-access-2007ms-access-forms

解决方案


首先,“Flase”应该更新为“False”。

与其存储然后重新填充选定的值,不如根据选择将整个表单的可见性变为真/假,这将保留用户选择的最后一个值,这可能更容易。

为了显示控件的可见性,请尝试:

Private Sub Combo36_Change()
    If Me.Combo36.Value = "No" Then
        Me.Combo18.Visible = False
        Me.Combo20.Visible = False
    ElseIf Me.Combo36.Value = "Yes" Then
        Me.Combo18.Visible = True
        Me.Combo20.Visible = True
    End If
End Sub

推荐阅读