Microsoft Access VBA - テキストボックスに半角カナしか入力できないようにする方法
文書番号: ac2002007
動作確認: Access 97/2002
◆概要
この資料は、Microsoft AccessのテキストボックスでIMEモードを制御する方法を記載しています。
◆内容
テキストボックスのIMEモードの設定は、テキストボックスの「漢字変換モード」プロパティで設定しますが、「漢字変換モード」を半角カナにしただけでは、ユーザーが漢字に変換してしまうことが考えられます。
氏名のフリガナなどのように半角カナで入力させ、漢字変換はさせたくない場合はつぎのようにすると解決できます。
まず、テキストボックスのプロパティ「漢字変換モード」を半角カナにします。
次に、標準モジュールに以下のコードを入力します。
◆標準モジュール
Option Compare Database Option Explicit Global Const acIME_SMODE_NONE = 0 Global Const acIME_SMODE_PLAURALCLAUSE = 1 Global Const acIME_SMODE_SINGLECONVERT = 2 Global Const acIME_SMODE_AUTOMATIC = 4 Global Const acIME_SMODE_PHRASEPREDICT = 8 Global ImmIMESetenceKeep As Long Global lIMESentenceMode_Conv As Long Declare Function ImmGetContext Lib "imm32.dll" ( _ ByVal hWnd As Long _ ) As Long Declare Function ImmReleaseContext Lib "imm32.dll" ( _ ByVal hWnd As Long, _ ByVal himc As Long _ ) As Long Declare Function Imm_acGetIMESentenceMode Lib "imm32.dll" _ Alias "ImmGetConversionStatus" ( _ ByVal himc As Long, _ lpcnv As Long, _ lpsent As Long _ ) As Long Declare Function imm_acSetIMESentenceMode Lib "imm32.dll" _ Alias "ImmSetConversionStatus" ( _ ByVal himc As Long, _ ByVal cnv As Long, _ ByVal sent As Long _ ) As Long Function acGetIMESentenceMode(frm As Form) As Long Dim intWindowHandle As Long Dim himc As Long Dim ret As Long Dim lsent As Long intWindowHandle = frm.hWnd himc = ImmGetContext(intWindowHandle) ret = Imm_acGetIMESentenceMode(himc, lIMESentenceMode_Conv, lsent) acGetIMESentenceMode = lsent ret = ImmReleaseContext(intWindowHandle, himc) End Function Function acSetIMESentenceMode(mode As Long, frm As Form) Dim intWindowHandle As Long Dim himc As Long Dim ret As Long Dim lsent As Long intWindowHandle = frm.hWnd himc = ImmGetContext(intWindowHandle) ret = Imm_acGetIMESentenceMode(himc, lIMESentenceMode_Conv, lsent) ret = imm_acSetIMESentenceMode(himc, lIMESentenceMode_Conv, mode) ret = ImmReleaseContext(intWindowHandle, himc) End Function
最後に、フォームのテキストボックスのフォーカス取得時イベントプロシージャとフォーカス喪失時イベントプロシージャに次のコードを入力します。
Private Sub txbふりがな_Enter() 'IMEの現在の変換モードを変数ImmIMESentenceKeepに保存する。 ImmIMESetenceKeep = acGetIMESentenceMode(Me.Form) 'IMEを無変換モードにする acSetIMESentenceMode acIME_SMODE_NONE, Me.Form '無変換モード End Sub Private Sub txbふりがな_Exit(Cancel As Integer) 'IMEの制御をフォームの既定に戻す acSetIMESentenceMode ImmIMESetenceKeep, Me.Form End Sub
▼ページトップに戻る