この人頭いいなと思ったエピソード

タイトルの通りです

excelのInputBoxで日本語入力OFFにしたいのですが、
VBAでIME(MS-IME)を制御できるのでしょうか。

セルへの入力であれば、入力規則で出来るので、
イメージとしては、そんな感じです。

A 回答 (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
    • good
    • 2
この回答へのお礼

コードまでありがとうございました

SendKeys
で対応することにしました

お礼日時:2006/03/05 22:03

>日本語入力OFF


(1)入力モードの初期値を英数にするということですか
(2)結果入力値が全角ではない内容にしたいということですか。
(2)だと回答は大幅に変わるでしょう。
>セルへの入力であれば、入力規則で出来るので
これも(1)のはず。
マクロの記録ではValidationの .IMEMode = xlIMEModeAlphaと出てきます。
TextBoxなどコントロールにはプロパティにIMEModeがあります。
InputBox関数自体にIMEを制御する機能はありません。
その対策として
http://www.officetanaka.net/excel/vba/tips/tips1 …
に逆のケース(ONにするケース)が載ってます。
APIを使う例も。
(ただし私のケースでは、SendKeys ("{kanji}")はOnにならずOffになった。)
対策以下は自信なし。
    • good
    • 0
この回答へのお礼

>(1)入力モードの初期値を英数にするということですか
こちらです。
SendKeys で対応することにしました。

参考URLありがとうございました。
>InputBox関数自体にIMEを制御する機能はありません
と書いてあり、今回の質問の回答になりました。

お礼日時:2006/03/05 22:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A