変わったチョコレート♪ 九重というお土産
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 船橋校 並木

2 Responses to “InputBoxでIME制御【VBA】”

  1. M.KASE Says:

    先生、こんばんはM.KASEです(#^.^#)

    いつも、マニアックなことばかり質問してすみません(笑)

    先ほど、試してうまくいきました。

    VBAには本当にいろいろな関数がありますね。
    これからInputBox関数を使うときはこのコードを参考にして
    IME入力モードも意識したいと思います。

    ありがとうございます、さすが先生です。

  2. ISA船橋校並木 Says:

    >M.KASEさん
    いつもコメントありがとうございます。
    うまくいったようで良かったです。

    マニアックなことでもご質問いただけるのは
    非常にうれしいです。

    これからもご質問お待ちしております!

コメントをどうぞ