3

タグから情報を読み取るキーボード エミュレーション デバイスによって入力されるデータで Excel セルを埋めるソリューションに取り組んでいます。データが読み取られた後、キーボード エミュレーション デバイスは TAB や CR などの後置文字を送信して、別のセルに進みます。

VBA を使用して、そのセルが TAB/CR からフォーカスを失ったときに入力されたデータの長さをテストできるかどうかを判断しようとしています。正しい長さでない場合は、前のセルの内容を削除するか、ユーザーに問題があることを知らせるメッセージ ボックス ウィンドウを表示するオプションが必要です。

どこから始めればいいのか本当にわかりません。

何か案は?

編集 - これが私のために働いているコードです。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iLen As Integer

If Target.Cells.Count > 1 Then Exit Sub ' bail if more than one cell selected

iLen = Len(Target.Value)    ' get cell data length
If iLen = 0 Then Exit Sub   ' bail if empty data

If Target.Column = 1 Then ' if Col A
    If Target.Row = 1 Then Exit Sub ' bail if column header
    If iLen <> 3 Then 'Replace *Your Value* with your length
        MsgBox "You have entered an incorrect Value"
        Application.EnableEvents = False 'So we don't get an error while clearing
        Target.Offset(0, 0).Value = ""
        Target.Offset(0, 0).Select
        Application.EnableEvents = True ' So Excel while function normal again
    End If
ElseIf Target.Column = 2 Then ' if Col B
    If Target.Row = 1 Then Exit Sub ' bail if column header
    If iLen <> 7 Then
        MsgBox "You have entered an incorrect Value"
        Application.EnableEvents = False
        Target.Offset(0, 0).Value = ""
        Target.Offset(0, 0).Select
        Application.EnableEvents = True
    End If
End If
End Sub
4

3 に答える 3

0

このようなものを使用するとうまくいくかもしれません。

Private PreviousSelection As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not PreviousSelection Is Nothing Then
' you have a previous selection, do stuff to it here
End If

Set PreviousSelection = Target

End Sub

キーボード エミュレータが非常に高速にキーを送信している場合は、苦労する可能性があります。

エミュレーターがタブまたは CR (複数のセルなど) の後でもデータを送信し続ける場合、メッセージ ボックスがワークシートからフォーカスを奪うため、メッセージ ボックスにエラーを表示することはできません。

于 2013-04-09T22:43:08.910 に答える