向表中添加新记录时,"您输入的文本不是列表中的项" 错误

备注

Office 365 ProPlus 正在重命名为 适用于企业的 Microsoft 365 应用。 有关此更改的详细信息, 请阅读此博客文章

原始 KB 数:   824176

备注

本文仅适用于 Microsoft Access 数据库 ( .mdb) 。 需要基本的宏、编码和互操作性技能。

症状

当您尝试使用窗体上组合框的 NotInList 事件以编程方式向表中添加新记录时,您可能会收到以下错误消息:

您输入的文本不是列表中的项。
从列表中选择一个项目,或键入与其中一个列出的项目相匹配的文本。

但是,新记录已成功添加到表中。 因此,您输入的新项目将添加到组合框中的项目列表中。

原因

当组合框绑定到 "数字" 数据类型列,并且将该列的 "格式" 属性设置为 " 货币 " 或 " 欧元 " 时,将发生此问题。

解决方法

若要解决此问题,请在组合框中键入与组合框绑定到的列的格式相匹配的值。 例如,如果列的格式为 Currency ,请键入 $20 而不是20。

但是,如果列的格式设置为 欧元 ,则您可能无法输入与列的格式相匹配的数字。

备注

如果重置列的 Format 属性,则不会出现该问题。

更多信息

当您键入的数字与已存在的组合框中的项相对应时,也可能会收到错误消息。 如果键入的数字与已存在的基础 recordset 的格式化条目不匹配,则可能会出现此问题。

在 Microsoft Office Access 2003 中再现行为的步骤

  1. 启动 Microsoft Access。

  2. 创建新的 Db1 数据库。

  3. 若要创建所需的示例表,请按照以下步骤操作:

    1. 在 "数据库" 窗口中,单击 " 对象 " 下的 " "。
    2. 在右侧窗格中,双击 " 设计" 视图中的 "创建表 "。
    3. 字段名称 列的第一行,typeID,然后将相应的 数据类型 设置为 "自动编号 "。
    4. 字段名称 列的第二行中,typeRates,然后将相应的 数据类型 设置为 Number
    5. 在 " 字段属性 " 窗格中,单击 " 常规 " 选项卡。
    6. Format 属性设置为 Currency
    7. 在“文件”菜单上,单击“保存”。
    8. 在 " 另存为 " 对话框中,键入速度,然后单击 "确定"
    9. 在 " 文件 " 菜单上,单击 " 关闭 "。
  4. 在数据库窗口中,单击 " 对象 " 下的 " 窗体 "。

  5. 在右侧窗格中,双击 " 设计视图" 中的 "创建窗体 "。

  6. ComboTest 组合框添加到窗体中,然后按如下所示设置属性:

    属性
    别名 ComboTest
    绑定列: 1
    RowSourceType 表/查询
    行来源: 选择 "Rates.ID"、"速率"。速率。
    自动扩展:
    限制为列表:
    列计数: 双面
    列宽: 0 "; 1"
  7. 在 " 视图 " 菜单上,单击 " 代码 " 以打开 Microsoft Visual Basic 编辑器。

  8. 将以下代码粘贴到 ComboTest 组合框的 NotInList 事件中。

    备注

    本文中的示例代码使用的是 Microsoft 数据访问对象。 若要正确运行此代码,您必须引用 Microsoft DAO 3.6 对象库。 若要执行此操作,请在 Visual Basic 编辑器中的 " 工具 " 菜单上单击 " 引用 ",并确保选中了 " Microsoft DAO 3.6 对象库 " 复选框。

    Dim Db As DAO.Database
    Dim Rs As DAO.Recordset
    Dim Msg As String
    
        Msg = "'" & NewData & "' is not in the list." & vbCr & vbCr
        Msg = Msg & "Do you want to add it?"
        If MsgBox(Msg, vbQuestion + vbYesNo) = vbNo Then
            Response = acDataErrContinue
           MsgBox "Try again."
        Else
            Set Db = CurrentDb
            Set Rs = Db.OpenRecordset("Rates", dbOpenDynaset)
    
            Rs.AddNew
            Rs![Rates] = NewData
            Rs.Update
            Response = acDataErrAdded
    
        End If
    
  9. 在“文件”菜单上,单击“保存”。

  10. 在 " 另存为 " 对话框中,键入 FormTest,然后单击 "确定"

  11. 在 " 文件 " 菜单上,单击 " 关闭 "。

  12. 在 "数据库" 窗口的右窗格中,双击 " FormTest "。

  13. 在组合框中键入一个数字,然后按 ENTER 键。

    将触发 NotInList 事件。 您会收到本文 "症状" 一节中提到的错误消息。

参考

有关 NotInList 事件的详细信息,请单击 " 帮助 " 菜单上的 " Microsoft Access 帮助 ",在 "Office 助手" 或 "应答向导" 中键入 NotInList 事件 ,然后单击 " 搜索 " 以查看主题。