6月 14

こんにちは。

今日は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 船橋校 並木

Check