質問: エクセルvbaでnumlockキーの状態を確認する エクセルvbaでnumlockキーの状態を確認することはできますでしょうか? 検索の結果 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1352157463 のページを見つけましたが、 private declare sub getkeyboardstate lib "user32" (pbkeystate as byte) でエラーになってしまいます。 なぜかと検索してみると、どうやら私のwindows が64ビットだからのようです。 64ビットに対応し、excel、 エクセルvbaでnumlockキーの状態を確認し、offだったらonにするということが出来るでしょうか。 勿論、vbaでsendkeysを連発するとnamlockキーがoffになってしまう時があるということや、apiのsendinput 、keybd_eventイベントもあると思いますが、何が適当なのか、64ビットに対応させるのはどうするのか、教えて頂けるとありがたいです。よろしくお願いします。
回答: こんにちは、#2#4です。 迷ったのですけれど、 このスレ読んで誤解する人いると悲しいので 指摘しておきますね。 > windows7には対応していないようなので これは間違いです。 #3さんは、【64ビット版 windows7 & 32ビット版 office】環境で"問題なく動く"と仰っています。 #1さんも同様のことを仰っているのだと思います。 #2#4で私は【64ビット版 windows7 & 64ビット版 office】環境で win32apiを使えるようにするにはどうしたらいいか書いています。 今回3つのサンプルコードが紹介されていますが (順に) ↓最初のご質問 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1352157463 ↓#3さんご紹介のもの http://www.accessclub.jp/samplefile/samplefile_214.htm ↓#4へのレスでkichi4182さんがあらたにご提示なさったもの http://oshiete.goo.ne.jp/qa/5156553.html (#3と#4は、functionで書くかsubで書くかの違いだけで まったく同じものですから、実際には2種類なのですけれど) 今回のこのスレッド全体としては 【64ビット版 windows7 & 32ビット版 office】環境 【64ビット版 windows7 & 64ビット版 office】環境 どのサンプルコードも、 "問題なく機能することを確認した" という話になっているのです。 【windows7】 はこの際関係なくて(問題ではなくて)、 【64ビット版 office】 では、 そのままの記述ではapiが通らないから 実際に動く様にするために どうしたらいいか、という話を書いているのです。 今回紹介された3つのサンプルコード、のいすれも、ちゃんと動きます。 excel でも access でも ユーザーフォームモジュール でも 勿論 標準モジュールでも 何度やっても動きます。 いくつかのイベントトリガーで numlock がかかることを実際に試してもいます。 今回紹介された3つのサンプルコードの場合、 【64ビット版 office】 で動くようにするには 単純に 1■ リンク先のサンプルコードを丸ごとそのままコピペして(コンパイルエラーは[ok]で無視して) 2■ ctrl + h で置換ダイアログを表示して "declare" を "declare ptrsafe" に モジュールごと、すべて置換する これだけで、最低限(*)の動作確認はできます。 (例えば、プロシージャにカーソルを当てて f5 キーを押すだけ) 今回紹介された3つのサンプルコード、のいすれも、ちゃんと動きます。 動作を確認出来ないということのようなので、あらためて単純化して書いてみました。 (*)推奨された手順としては、続いて、long型の置換が必要だということは#4で触れています。 要は 【office 2010 64ビット版】だけは、api の書き方が他のバージョンとは違うってだけの話 ですので、ご理解いただきたいです。