パソコン情報

【Access】InputBoxで半角英数設定したり、Numlkキーを固定したりして時間が無駄に経過した備忘録

マイクロソフト様のデータベースアクセス(以下Access)は癖が強すぎる時があります。その癖の為に数時間を費やしてしまう時があります。

今回は、

注意ポイント

InputBoxをつかったパスワード認証画面を設置したのですが、半角英数で固定したいのに、毎回ひらがな入力モードになってしまいます。

毎回IMEを切替するのは本当にストレスなので対処しようとしたら更なる壁がありました。

 

 

 

InputBoxでパスワード認証フォームを設置

Private Sub Form_Open(Cancel As Integer)

    If IMEStatus <> vbIMEModeOff Then  '半角英数入力を固定にする
         SendKeys "{kanji}"
    End If

    If InputBox("パスワードを入力してください。 ") <> "password" Then
    
        Cancel = True
        MsgBox "パスワードが相違しています。"
    
    Else
    End If
End Sub

 

上記のコードでフォームが開くときにパスワード認証を設置してみました。

パスワードが相違すればフォームが開けないという仕組みです。

 

そして、パスワードは半角英数しか使わないのでネットから探し出した「半角英数入力を固定にする」方法をVBAに施しました。

 

しかし、毎回、ひらがなモードになり、半角英数モードにしないとダメでした。

 

 

 

VBAで半角英数にする方法

テキストボックスなら、プロパティシートにて、半角英数に設定ができますが、InputBoxの場合は、それがありません。

その為に、

 If IMEStatus <> vbIMEModeOff Then '半角英数入力を固定にする
 SendKeys "{kanji}"
 End If

 

を使った訳ですが、使い物になりません。

そして、探し当てたコードが下記になります。

 

IMEStatu = vbIMEModeOff

 

この一行を突っ込んでおけばInputBox入力時でも半角英数に固定されました。

 

あー良かったって思っていたら、毎回キーボードのテンキーが使えなくなるのです。

つまり、

ココがダメ

NumlkがOFFにされるのです

 

 

NumlkがOFFになる怪現象はバグ!?

 

どうも、SendKeys ステートメントが連続して実行されると、NumLock キーがオフになるバグがあるようです。

最初は、SendKeysを使っていましたが、途中から、

IMEStatu = vbIMEModeOff

に変えても同じ現象がでていました。

 

ここから無駄な時間が経過していきました。

ネットで調べると、WSH(Windows Scripting Host)などをつかった回避方法などが数行のコードと共に有志から記事になっておりましたが、どうもうまくいきませんでした。

また、テンキーだけの為に複数のコードを追加するってのも嫌な感じです。

マイクロソフト様ですから、民がバグを主張しても簡単に直してはくれません。

もう、根性で調べて方法を見つけるしかありません。

 

見つけました!!

 

SendKeys "{NUMLOCK}"

 

この一行を突っ込めば見事にNumlkが外れることなく行くことができました。

※ただテンキーの無いノートパソコンでは試してないので何か支障がでるのかは不明

 

 

 

最終的なコード

Private Sub Form_Open(Cancel As Integer)
    
    IMEStatu = vbIMEModeOff
     SendKeys "{NUMLOCK}"
 
    If InputBox("パスワードを入力してください。 ") <> "password" Then
    
        Cancel = True
        MsgBox "パスワードが相違しています。"
    
    Else
    End If
End Sub

 

 

なんとか解決してよかったのですが、本当にAccessは癖がありちょっとしたことで数時間を費やすハメになるこが沢山あります。

なので、忘れないようにこのような記事を残して置くといいですね。