【问题标题】:ComboBox empty/null throws error. How to "reset" field?ComboBox 为空/null 会引发错误。如何“重置”字段?
【发布时间】:2015-05-23 08:05:26
【问题描述】:

我的表单中有一个组合框,其中包含一个表格填充列表作为行源。当用户输入该字段,更改某些内容并将其删除以使组合框为空时,我收到错误消息“您尝试将空值分配给不是变体数据类型的变量”。

问题是我的组合框不允许空字符串,但我也找不到在错误之前触发的组合框中的事件。所以我不能使用 Len 或 IsNull 来捕捉错误。目前我使用这个“解决方法”,但它是非特定的,因为它使用表单而不是组合框的错误事件:

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    Me.myField.Undo
    Response = acDataErrContinue
End Sub

有没有更好的方法来处理这个问题?

我找到了this。但这并没有解决问题。

【问题讨论】:

  • 确切的哪一行会抛出那个错误,因为它不是与控件或表格相关的错误,它与代码有关。您可能最好更改代码部分的变量类型。
  • 没有变量,只有两个表之间的链接来更新文本字段。
  • 链接是什么样的?它如何更新字段?
  • 组合框将一个表的 id 引用到另一个表。在我的情况下,值变为空,这是我的问题
  • 引用必须在某处。它在哪里?它看起来像什么?

标签: ms-access vba


【解决方案1】:

正如 Remou 在 cmets 中指出的那样,错误是在将新值输入组合框后响应您正在执行的操作。检查组合框事件。如果您不介意类型并想使用空值,则可以将变量更改为 Variant 类型。如果您使用的是字符串或整数等实际数据类型,请使用 NZ() 函数来筛选空值。

例如,如果您想在组合框为空的情况下将空字符串分配给字符串变量,那么您可以这样做:

dim s as string
s = nz(me.combobox,"")

至于在错误之前触发 - 在您的代码中的某个地方,您已经有导致错误的违规代码。你需要找到那个。为了提供更详细和具体的答案,您需要提供更多信息。

【讨论】:

  • 这当然是一个更完整的答案:)
  • 绝对是链接。我指的是一个具有空值的整数(id)。
  • 如果您已经意识到这一点,请原谅我 - 只是想我会介绍基础知识:您可以尝试将表关系(链接)更改为 1:1(表之间没有箭头)。这意味着如果 Table1 的键是“55”并且 Table2 不包含 55 - 那么来自 Table1 的记录将不会显示。如果您进行一对多关系(仅第二个表上的箭头),那么如果 Table2 中没有“55”,您将看到 table1 的内容,但 table2 中的每条记录都是 Null。
【解决方案2】:

这是一个未记录的 Microsoft“功能”,旨在让您发疯。而那些告诉你“查看你的代码”、“在你的代码中某处”的人并不知道他们在说什么。

两种解决方法。更改表中的基础字段以允许空值,或者,我认为这是最好的方法,将您的组合更改为未绑定控件并在 AfterUpdate 事件中设置基础字段。

【讨论】:

  • 遗憾的是,这是正确的答案。错误消息使它看起来像是代码问题,但事实并非如此。这只是开发人员必须决定是否值得以围绕 Access 的预期行为编写代码为代价为用户提供更好体验的众多情况之一。
  • 或者,您可以在 Form_Error 事件中捕获错误并设置 Response = 0 并处理您的选择。
猜你喜欢
  • 1970-01-01
  • 2016-03-15
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多