マイクロソフト様のデータベースアクセス(以下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は癖がありちょっとしたことで数時間を費やすハメになるこが沢山あります。
なので、忘れないようにこのような記事を残して置くといいですね。