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



▼ページトップに戻る