MS Access 2003 年度实物盘点系统:如何拦截与ERP导出零件号不匹配的扫描录入?
阻止无效零件编号录入的实现方案(MS Access 2003)
当然可以实现!针对你当前的盘点系统场景,结合已经链接到Access的ERP全量零件号Excel表,有两种实用的方法来拦截不匹配的扫描录入,适配不同的使用需求:
方法1:表级验证规则(全局拦截)
这种方法直接在存储扫描数据的表上设置规则,不管是通过表单扫描还是直接编辑表数据,都会触发验证,适合需要全局管控的场景:
- 打开你的盘点数据表(比如命名为
Inventory_Scans),切换到设计视图。 - 找到存储扫描零件编号的字段(比如
Scanned_PartNumber),在字段属性的验证规则中输入:
(这里假设你链接的Excel表名为In (SELECT PartNumber FROM Linked_ERP_PartNumbers)Linked_ERP_PartNumbers,零件号字段为PartNumber,根据实际名称调整) - 在验证文本里填写友好的提示信息,比如:
"该零件编号不在ERP系统中,请检查条码或手动输入正确编号!" - 保存表设置即可。之后任何不符合规则的零件号录入都会立刻弹出提示,阻止数据保存。
方法2:表单实时验证(扫描场景更友好)
如果是通过表单进行扫描录入,这种方法能在扫描完成后立刻反馈,避免操作人员重复无效操作:
- 打开用于扫描的录入表单,切换到设计视图。
- 找到接收扫描数据的文本框(比如
txt_ScannedPart),双击打开属性窗口,找到After Update事件,点击右侧的[...]按钮选择「代码生成器」。 - 在VBA编辑器中输入以下代码:
Private Sub txt_ScannedPart_AfterUpdate() Dim strInputPart As String ' 处理空值和特殊字符(比如单引号) strInputPart = Replace(Nz(Me.txt_ScannedPart, ""), "'", "''") If strInputPart <> "" Then ' 检查输入的零件号是否存在于链接表中 If DCount("*", "Linked_ERP_PartNumbers", "PartNumber = '" & strInputPart & "'") = 0 Then MsgBox "错误:该零件编号未在ERP系统中记录,请检查条码或重新扫描!", vbExclamation, "无效零件号" ' 清空错误输入并聚焦到文本框,方便重新扫描 Me.txt_ScannedPart.SetFocus Me.txt_ScannedPart.Text = "" End If End If End Sub - 保存表单和VBA代码,之后每次扫描完成(文本框内容更新后),系统会自动验证,无效编号会立刻提示并清空输入框。
额外注意事项
- 确保链接的Excel文件路径稳定,不要随意移动或重命名,否则Access会无法读取链接表导致验证失效。如果需要更新ERP零件号,直接替换Excel文件后,在Access中右键点击链接表选择「刷新链接」即可。
- 如果你的零件号包含数字、特殊字符混合的情况,要确保链接表中的
PartNumber字段和扫描录入字段的数据类型一致(比如都设为文本型),避免因类型不匹配导致验证错误。
内容的提问来源于stack exchange,提问作者Tbure90
相关产品推荐
相关产品推荐

