こんにちは。
今日はVBAのお話です。
パソコン教室で受講中の生徒さんより
「InputBoxが表示されたときに
あからじめ入力モードをオフにしておくことってできないですか?」
というご質問を受けました。
残念ながらInputBoxが本来持っている引数では
IMEを制御する引数はありません。
「出来そう」とは思いながらも
その場ではすぐには思いつきませんでした(^-^;)
インストラクターという性分か
どうしてもやりたくなってしまったので
色々とVBAのヘルプ等で調べてみました。
結果的に出来ました。
まずは正解から。
———————
Sub Sample()
Dim buf As String
If IMEStatus <> vbIMEModeOff Then
SendKeys “{kanji}”
End If
buf = InputBox(”何か文字を入れてください”)
MsgBox buf
End Sub
—————————
上記で、例えばあらかじめ入力モードを「ひらがな」にしている状態で実行すると
InputBoxが表示されるときには入力モードがオフになります。
InputBoxに入力する値が半角の英数を入力することが決まっているときは
いちいち入力モードを切り替えるのは面倒臭いです。
そんなときは上記のVBAで解決です。
ポイントはこの部分。
If IMEStatus <> vbIMEModeOff Then
SendKeys “{kanji}”
End If
少し解説をしていきます。
まず全体的な流れですが
①現在のIME入力モードがオフでなければ
(つまりひらがな入力等他の入力モードになっていたら)
②IME入力モードをオフにして
③InputBoxを表示する
という流れです。
細かく見ていきましょう。
◆IMEStatusという部分
IMEStatus関数というものを利用しており
これはヘルプにも掲載されていますがIME の現在の状態を返すものです。
◆vbIMEModeOffという部分
IMEStatus関数の戻り値です。
他にも様々なものがありますが、今回の目的は入力モードをオフになっているかどうかを
判別したいので、IME がオフの状態を表す「vbIMEModeOff」を利用しています。
◆ SendKeys “{kanji}”という部分
SendKeysステートメントを利用しています。
SendKeysは、通常キーボード等でキーが押されたときの信号をVBA上で擬似的に発生させるステートメントです。
とまぁちょっと難しいので割愛しますが
SendKeys “{kanji}”と指定することではIMEをオン/オフさせることができます。
入力モードがもともとオンになっている状態で利用すると、入力モードはオフになり
入力モードがもともとオフになっている状態で利用すると、入力モードはオンになる特徴があります。
実は “{kanji}”という指定方法はヘルプに載っていませんでした・・・
なぜ載っていないんだーというところですがその辺りは置いておきます(^-^;)
ですので、あらかじめIfステートメントを利用して、IMEStatusを利用し
現在のIMEの状態を把握した上で
入力モードがオンになっている場合には
SendKeys “{kanji}”で入力モードをオフにするという処理を働かせています。
VBA受講中の生徒さん、ぜひお試しください。
またVBAって何?という方
いつでもご質問を受けますのでお気軽に船橋校のインストラクターに
来てくださいね☆
パソコンスクールISA 船橋校 並木
最近のコメント