dポイントプレゼントキャンペーン実施中!

フォームでバーコードを読み込むと全角で入力されていますので、
自動で半角に変更したいですが、
どのようにすればよいでしょうか
宜しくお願い致します。

A 回答 (1件)

> フォームでバーコードを読み込むと全角で入力されていますので、


> 自動で半角に変更したいですが、

入力とは実際にはどんな状況でしょうか。
テキストボックス名を「txt1」と仮定します。

「txt1」に文字を入力していくと、1文字ごとに変更時イベントが発生しますが、
コピー&ペーストでは、貼り付けた文字列全部で1回の変更時イベントが発生します。
ここで、入力された・・・・この表現ですが、
入力したものが表示されているだけで、Enterキーとか押下していない状態の事でしょうか。

入力して、Enterキー(他の操作もありますが)で確定することで、
更新前処理 / 更新後処理イベントが発生します。

どの状態の時に半角にしたいのか・・・これによって、使用できるイベントが異なってきます。


★ 確定する操作をした後で良い場合

更新前処理 / 更新後処理イベントで処理を分けます。
更新前処理 では、入力値をチェックし、対象外があったら Cancel = True を返し再入力させます。
更新後処理 では、全角→半角変換を行います。

記述例)入力値は数字だけと仮定し、チェックする場合

Private Sub txt1_BeforeUpdate(Cancel As Integer)
  Cancel = Me.txt1.Text Like "*[!0-9]*"
End Sub

Private Sub txt1_AfterUpdate()
  Me.txt1 = StrConv(Me.txt1, vbNarrow)
End Sub


★ 確定操作をしなくても半角に

使えるイベントは、変更時しかありません。
変更時では、入力文字は Me.txt1.Text で参照します。
ただ、Me.txt1.Text に全角→半角に変更した文字を設定すると、
再度、変更時が呼ばれ・・・さらに、更新前処理 / 更新後処理イベントまで発生します。
値を設定したことにより、また同じ処理を行わないようにフラグで対処してみます。
(フラグ以外の方法もありますが、今回は割愛します)

ここでも上記同様に、入力値は数字だけと仮定し、チェックする場合

Private Sub txt1_Change()
  Static bNop As Boolean

  If (Not bNop) Then
    bNop = True
    If (Me.txt1.Text Like "*[!0-9]*") Then
      Me.txt1.Text = "" ' ▲ 対象外があったら入力文字を全部消す
    Else
      Me.txt1.Text = StrConv(Me.txt1.Text, vbNarrow) ' ▲ 全角→半角に変更
    End If
  End If
  bNop = False
End Sub


※ 上記 ▲ を行うと、変更時 / 更新前処理 / 更新後処理 が連続して発生します。

※ 変更時の処理と、
更新前処理 / 更新後処理での処理は、どちらかを記述するものになります。
どちらが使えるのか・・・・云々は、実際にやってみてください。
(入力が、どの様な動きをするものなのか私には見えないので)


※ 雰囲気は動くと思いますが、不都合があれば修正してください。
    • good
    • 0
この回答へのお礼

おかけ様で解決できました。
どうもありがとうございました。

お礼日時:2013/03/16 17:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A