◆◆MS-Excel2000スキルアップ講座/VBA編◆◆

フォームで入力規制
住所表などに入力する際に一覧表では入力規制により、漢字入力のセルと英数半角のセルの列を指定できると思うんですがこれをフォームの形式になおして漢字と半角を区別したいのですがうまくできません。
方法1

テキストボックスの入力規制を、マクロで実現してみました。とりあえず入力させるだけさせて、規制に引っ掛かる文字を排除しています。

'TextBox1が1バイトコード入力用です
'TextBox1が2バイトコード入力用です

Private Sub TextBox1_Change()
    Dim i As Integer
    Dim str As String
    Dim ch As String
    With TextBox1
        str = ""
        For i = 1 To Len(.Text)
            ch = Mid(.Text, i, 1)
            If Asc(ch) >= 0 And Asc(ch) < &H100 Then
            '1バイトコードの場合
                str = str & ch
            Else
               
            End If
        Next i
        .Text = str
    End With
End Sub

Private Sub TextBox2_Change()
    Dim i As Integer
    Dim str As String
    Dim ch As String
    With TextBox2
        str = ""
        For i = 1 To Len(.Text)
            ch = Mid(.Text, i, 1)
            If Asc(ch) >= 0 And Asc(ch) < &H100 Then
               
            Else
            '2バイトコードの場合
                str = str & ch
            End If
        Next i
        .Text = str
    End With
End Sub

方法2

シ−ト上にコントロ−ルを配置してとかユ−ザフォ−ムまでマクロで作成となると,イベントの処理とかの説明が私ではちょっとうまく出来ないので,あらかじめユ−ザフォ−ムがある場合の例にします。ユ−ザフォ−ムを作り,そこにテキストボックス(TextBox1とTextBox2)を2つ作ります。

標準モジュ−ルに
Sub test()
    UserForm1.Show
End Sub

フォ−ムモジュ−ルに
Private Sub TextBox1_Enter()
    TextBox1.IMEMode = fmIMEModeHiragana
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox1.IMEMode = fmIMEModeNoControl
End Sub

Private Sub TextBox2_Enter()
    TextBox2.IMEMode = fmIMEModeAlpha
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox2.IMEMode = fmIMEModeNoControl
End Sub

を書きます。testを実行し,フォ−ムを表示させ,TextBox1にフォ−カスすると漢字
入力でTextBox2にフォ−カスすると英数半角に自動的にIMEが切り替わります。この
マクロは,もちろんそれ以外なにもしませんので,何の役にも立ちません。

#IMEが切り替わるだけで,なんでも入力する事はできます。これってダメ?。