- ベストアンサー
excelのInputBoxで日本語入力OFFにしたい
タイトルの通りです excelのInputBoxで日本語入力OFFにしたいのですが、 VBAでIME(MS-IME)を制御できるのでしょうか。 セルへの入力であれば、入力規則で出来るので、 イメージとしては、そんな感じです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 詳しい状況が分らないので、あまり正確にVBAのコードを書くことが出来ません。IMEをどこで使うかによっても変ってきます。なお、入力規則とはかなり違います。 まあ、一般的な方法を二つ書いておきます。 '-------------------------------------------- Sub IMEControl1() Dim Ret As String If IMEStatus <> vbIMEModeOff Then SendKeys "%{kanji}" End If Ret = Application.InputBox("入力してください。", Type:=2) If Ret <> "" Then MsgBox "IME-OFF with SendKey :" & Ret End If End Sub '次は、Win32 API関数を使った方法です。 '-------------------------------------------- Private Declare Function ImmGetContext Lib "imm32.dll" (ByVal hWnd As Long) As Long Private Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal hWnd As Long, ByVal hImc As Long) As Long Private Declare Function ImmSetOpenStatus Lib "imm32.dll" (ByVal hImc As Long, ByVal b As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long '-------------------------------------------- Sub IMEControl2() Dim hImc As Long Dim myHWnd As Long Dim Ret As String 'バージョンチェック If Application.Version > 9 Then myHWnd = Application.hWnd Else myHWnd = FindWindow("XLMAIN", 0) End If hImc = ImmGetContext(myHWnd) 'IMEをOFF If hImc <> 0 Then Call ImmSetOpenStatus(hImc, 0) Call ImmReleaseContext(myHWnd, hImc) End If Ret = Application.InputBox("入力してください。", Type:=2) If Ret <> "" Then MsgBox "IME-OFF with API :" & Ret End If End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
>日本語入力OFF (1)入力モードの初期値を英数にするということですか (2)結果入力値が全角ではない内容にしたいということですか。 (2)だと回答は大幅に変わるでしょう。 >セルへの入力であれば、入力規則で出来るので これも(1)のはず。 マクロの記録ではValidationの .IMEMode = xlIMEModeAlphaと出てきます。 TextBoxなどコントロールにはプロパティにIMEModeがあります。 InputBox関数自体にIMEを制御する機能はありません。 その対策として http://www.officetanaka.net/excel/vba/tips/tips16.htm に逆のケース(ONにするケース)が載ってます。 APIを使う例も。 (ただし私のケースでは、SendKeys ("{kanji}")はOnにならずOffになった。) 対策以下は自信なし。
お礼
>(1)入力モードの初期値を英数にするということですか こちらです。 SendKeys で対応することにしました。 参考URLありがとうございました。 >InputBox関数自体にIMEを制御する機能はありません と書いてあり、今回の質問の回答になりました。
お礼
コードまでありがとうございました SendKeys で対応することにしました