- ベストアンサー
日本語入力ONかつ「NumLock」ONのマクロ
- Excelを起動したときに、「NumLock」キーがOFFにならないようにしてONのままで、IMEが日本語入力ONで起動できる方法について教えてください。
- Excel2010では、起動したとき、「NumLock」キーがOFFにならずにONのままで、IMEを日本語入力ONで起動できるようになっていました。
- しかし、Excel2013では、IMEは日本語入力ONになるものの、SendKeysの影響で「NumLock」キーがOFFになってしまいます。記述に足りない部分や修正方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SendKeys で Numlock が外れるのは昔から。 API で IME のOn/Off を切り替えれば良いかと。NumLock が外れることもありませんし。 以下3行を VBA の標準モジュールに記述 Public Declare Function ImmGetContext Lib "imm32.dll" (ByVal hWnd As Long) As Long Public Declare Function ImmSetOpenStatus Lib "imm32.dll" (ByVal himc As Long, ByVal b As Long) As Long Public Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal hWnd As Long, ByVal himc As Long) As Long ThisWorkbookの方には Private Sub Workbook_Open() Dim himc As Long Dim hWnd As Long 'IMEをOn himc = ImmGetContext(Application.hWnd) Call ImmSetOpenStatus(himc, 1) Call ImmReleaseContext(hWnd, himc) End Sub これでIME が ON になるかと思います。 Excel2013 は持ち合わせていないので、2010と2016(ともに32Bit版)で試しました。 参考にしたところ http://www.alato.ne.jp/kazu-/vb/tip09.htm 蛇足?ですが、時間があったら読んでみてください。 NUM を切り替えるにはロック、CAPS LOCK キー、およびスクロール ロック キー方法 https://support.microsoft.com/ja-jp/kb/177674 NumLock操作を制御する方法 - Windows APIの使用:SampleFile214 http://www.accessclub.jp/samplefile/samplefile_214.htm
その他の回答 (1)
- tamohoykm
- ベストアンサー率13% (53/397)
BIOSでは、on設定になっていますか。 オン設定にもかかわらず、ならないなら、レジストリーで変更するしかありません。
補足
早速の回答ありがとうございます。 SendKeysが影響してnumlockキーがOFFになるのです。該当ページあり。https://support.microsoft.com/ja-jp/kb/179987 ただただ、その影響でOFFになったnumlockキーをONにしたいのです。 そのマクロをお教えいただきたいのです。 こちらのは、BIOSはonの設定です。
お礼
失礼します。 さきほど、あつかましいお願いをしましたが、お教えいただいた説明とかを読んでいくうちにわかりました。 解決いたしました。IME、NumLockともONにて起動できました。 ほんとうに、ありがとうございました。
補足
ご回答ありがとうございます。 Sub Auto_Open() SendKeys ("{kanji}") End Sub 上記(1)を標準モジュールに残し、 Public Declare Function ImmGetContext Lib "imm32.dll" (ByVal hWnd As Long) As Long Public Declare Function ImmSetOpenStatus Lib "imm32.dll" (ByVal himc As Long, ByVal b As Long) As Long Public Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal hWnd As Long, ByVal himc As Long) As Long この3行(2)を別の標準モジュールに記述しましたが、できません。 Private Sub Workbook_Open() Dim himc As Long Dim hWnd As Long 'IMEをOn himc = ImmGetContext(Application.hWnd) Call ImmSetOpenStatus(himc, 1) Call ImmReleaseContext(hWnd, himc) End Sub これ(3)これだけを標準モジュールに残し、他の標準モジュールを削除し試しましたができません。 (1)を削除して、(2)と(3)をそれぞれ別の標準モジュールに記述しましたができません。 誠にすみませんが、全体の標準モジュールの記述を書いていただけますか。よろしく、お願いします。