2017-09-26 1 views
0

나는 액세스 데이터베이스를 가지고 있습니다. 필자는 텍스트 상자가있는 양식을 가져 와서 사용자가 해당 텍스트 상자에 바코드를 스캔하도록합니다 (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

답변

0

실제로 변경시 이벤트를 사용할 수 있습니다. 구현 방법은 스캐너의 작동 방식에 따라 다릅니다. 스캐너가 바코드를 스캔 한 후 고정 된 수의 라인 만 입력하면 On Change 이벤트가 끝나면 라인 수를 세어보고 변경된 값이있는 경우 무언가를 할 수 있습니다.

대체 방법은 변경시 이벤트의 Form.Timer 속성을 작은 숫자로 설정 한 다음 타이머를 0으로 설정하고 폼 온 타이머 이벤트에서 실제 작업을 수행하는 것입니다. 이렇게하면 전체 바코드가 스캔되었다는 사실을 감지 할 필요가 없으며 콘텐츠를 변경 한 후 한 번만 트리거됩니다 (Form.Timer만큼 충분히 큰 경우).

또 다른 대안은 이전 및 업데이트 이후 이벤트이지만 사용자가 텍스트 상자를 나가야합니다.

+0

form.timer 제안을 사용하여 종료되었습니다. 환상적으로 작동했습니다. – Albion

관련 문제