【问题标题】:Clear out dropdown value once another drodown value is changed in vba access?在 vba 访问中清除另一个下拉值上的下拉值?
【发布时间】:2017-09-20 13:13:25
【问题描述】:

我的 VBA 访问表单中有三个组合框控件(MFG、代码和 GrpID)。一旦用户从第一个组合框 (MFG) 中选择了一个选项,其余的组合框就会为我提供可用的选项。但我需要做一些验证,即如果用户决定更改第一个组合框的值怎么办?应清除其余组合框的值。我需要做的就是一旦第一个组合框被更改,第二个和第三个组合框需要被清除或至少设置为专注于它们,这样用户就会意识到他们不能使用旧值,因为第一个值被清除在第一个组合框中。我为第一个组合框添加了代码块'AfterUpdate,如下所示:

Private Sub MFG_AfterUpdate()
   Code.Value = " "
   GrpID.Value = 0    
End Sub

写完上面的代码后的问题是:在他们(代码和 GrpID)被点击之前,它们不会变空。换句话说,每次更改MFG的值时,我都需要单击它们以清空它们。谁能指导我如何清除它们或至少集中它们?

【问题讨论】:

  • 也许您需要重新查询?此外,如果该事件不起作用,请尝试 Change 事件
  • 我无法使用您提供的数据复制此行为(当我尝试此操作时触发 AferUpdate 事件时,组合框会立即清除)。请注意,当通过下拉列表更改组合框或从通过键入更改的组合框跳出时,会触发 AfterUpdate 事件。您能否提供更多详细信息?

标签: ms-access combobox vba


【解决方案1】:

将组合设置为 null 以擦除其中显示的任何值;

Me.Code = Null
Me.GrpID = Null

这假设您的组合控件的名称与您的字段名称相同。

为清楚起见进行编辑:包括我。确保您正在更改表单控件值。如果您的字段名称与控件相同,则 Access 将更改基础字段值,并且正如您在表单上发现的那样,这些值在您单击该字段绑定控件之前不会反映出来。

【讨论】:

  • 我怀疑这是否能解决 OP 所遇到的问题,因为(至少在我的设置中)""" "0 也都是即时设置的。是的,将它们设置为 Null 更好,但如果您认为这可以解决 OPs 问题,请解释原因,否则请发表评论。我最好的猜测是 On Update 函数在 OP 设置的后期触发,在这种情况下这不会有任何区别,但正如所说,无法复制所以无法测试
  • 这应该在第一个组合框的更新后起作用,我怀疑他使用了字段名称,而不是使用 Me 来引用当前表单控件对象。是他的问题的原因,所以我认为我的答案仍然有效。
  • 这是包含在答案中的有用信息(它将帮助用户再次避免错误,知道Me. 是相关部分而不是Null 很有用)。不过,我怀疑这是真的,因为如果没有冲突的变量,可以省略 Me.(就像大多数情况下的 Application.),如果有,你可能不会得到这种行为(代码工作,但是只是晚了)。但正如所说,无法复制所以无法测试,我们将不得不等待 OP。
  • @Minty:抱歉回复晚了。名称和控制源有不同的名称,这是一个非常古老的程序,所以我想知道如果我尝试重命名它们是否会出现任何问题。此外,我需要验证这些组合框不为空。这意味着,在单击“验证”按钮之前,它们不能为空。我需要清除其他 2 个组合值,以确保用户不会保留第一个组合框的第一个选择选项中的陈旧值。因此,一旦第一个组合框值更改,其他两个应该清除,以便用户输入新值
  • 好的 - 然后为了设置 Controls 值使用语法 Me.YourControlName = Null 。当您键入 Me. 时,您应该得到 intellisense 以列出可用的控件名称。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
相关资源
最近更新 更多