在Access 2016 VBA中,OnChange事件是最适合阅读条形码的事件吗?

问题描述:

我有一个访问数据库。我想调出一个带有文本框的表单,然后让用户将条形码扫描到该文本框中(15到20个字符)。将代码扫描到文本框中对我的USB HID扫描仪非常有用,但一旦扫描了代码,访问权限就位于此处。 OnChange事件看起来是正确的方向。这是我的示例代码。在Access 2016 VBA中,OnChange事件是最适合阅读条形码的事件吗?

Private Sub Text0_Change() 

    Debug.Print Me.Text0.Value 
    Debug.Print Len(Me.Text0.Value) 

End Sub 

我扫描条形码后,这是输出。

00000000000000000 
17 
00000000000000000 
17 
00000000000000000 
17 
. 
. 
. 
<repeated a total of 17 times> 

我是否正确地假设代码中的每个字符都触发OnCurrent?使用这种方法,我必须编写可以忽略除一个以外的所有事件的代码。我应该捕获哪个事件?第一个更改事件是否始终保存整个代码?这听起来像是一个很大的错误边缘。

我的目标是不经任何进一步的用户输入上运行扫描的条形码的一些代码,一旦代码被扫描(即不要求为用户按下回车键或扫描码之后的按钮)。 OnChange是否有更好的功能?我的方法学全错了吗?

在此先感谢您的帮助。

+1

大多数扫描仪可以被编程为一个_CrLf_(换行)添加到被扫描码。 – Gustav

你可以,事实上,使用On Change事件。我的实施将取决于扫描仪的工作原理。如果扫描仪刚刚进入扫描条形码后线固定数量的,你可以指望看到的行数,如果在您的更改活动的完成,做的东西,如果它有。

另一种方法是将On Change事件中的Form.Timer属性设置为一个小数字,然后将该计时器设置为0,并在窗体On Timer事件中执行您的实际工作。你不必检测整个条码被扫描的事实是这样,它只是改变它的内容之后触发一次,只有一次(只要Form.Timer数量足够大)。

另一种方法是前,后更新事件,但他们需要的用户离开文本框。

+0

我最终使用你的form.timer建议。它非常有效。 – Albion