• ベストアンサー

キーボードが押されたことの感知(エクセルVBA)

キーボードが押されたことを、イベントとするマクロってできるのでしょうか?例えば、ctlキーが押されたら、"押されました"、離されたら”離れました”って表示する方法をご伝授願えればと思います。どなたか、VBAに詳しい方、宜しくお願いいたします。また、感知することが出来ないキーや、右や左で判別できない(例えば、shiftキー)キーもあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 以前、9x系で、Win32APIを、見よう見まねで、キーイベントを作ろうとして、見事に失敗した経験があります。理論的は間違いないつもりでいたのですが、二度と試そうとは思いません。基本的には、無理だと考えてよいと思います。 >Win32API のGetKeyboardState 関数は、現在押しているかの判別だと思いますが???正しいのでしょうか? 確かに、そのとおりではあるのですが、あくまでも、API関数を通しての結果だったと思います。 >Alt キー、Ctrl キー、Shift キー(今考えているのは、Ctrl キー、Shift キー)を押した時に、メニューバーの表示を切替えようと考えています。 必要ないというよりも、Alt キーは、Excel等のアプリケーションと、コンフリクトを起こすのではないでしょうか?せいぜい、シフトキーまでにしないと、あぶなくてしょうがないです。それから、シフトキーだけでメニューを換えるというのは、既存のアプリでも出来ていませんね。あくまでも、ボタンのクリック・イベントに対して、シフトキーをチェックしてメニューを換えるようにされています。 あまり凝った方法にしないで、新たに、ツールバー全体を作るか、メニューバー自体を入れ替えたほうが早いのでは?どんなに多くても、100までにはならないと思いますが。というか、それだけのプロシージャを確保して運用しても、重すぎるのではないか、と思います。 私の苦い経験で、最初の大きく構えて設計段階でコケてしまうと、後が全滅になりますよ。小技を構築して、大きなものを作ったほうが、成功率は高いです。 また、ロータス方式のように、ひとつの大メニューバーのメニューコマンドに対して、小メニューバーを設けていってもよいのではありませんか? これ以上は、私としては、なんとも言い様がありません。

wan_wan
質問者

お礼

貴重なご意見有難う御座います。大変参考になりました。ただ、昔のMS-DOSのファンクションキーみたいなことが出来れば・・・!と思ったのがきっかけでした。ちょっとお洒落かなぁって思ったのでが、Windowの考え方から逸脱するので、忠告どおり別の方法を考えます。予め、相談して無駄に時間を費やすのが避けることが出来ました。本当に有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

シートのイベントにはありません。 ユーザーフォームのコントロールにはキーイベントの設定が可能です。 どのような事をしたいのでしょうか? Application.OnKey で、任意のキーに機能(マクロ)を設定する事が出来ます。 http://www.officetanaka.net/excel/vba/tips/tips67.htm

wan_wan
質問者

補足

早速のご指導ありがとう御座います。ご指導頂いた内容について補足させていただきます。具体的なことを書かなかったのが原因ですが、Alt キー、Ctrl キー、Shift キー(今考えているのは、Ctrl キー、Shift キー)を押した時に、メニューバーの表示を切替えようと考えています。(こんなことする必要がないとのご意見は多数あると思いますが・・・??)イメージ的には、windowからの割り込み信号のフックかと思いますが、方法が判りません。合せてご指導願えないでしょうか?(Win32API のGetKeyboardState 関数は、現在押しているかの判別だと思いますが???正しいのでしょうか?)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBA で CTRLキーを送る方法

    EXCEL VBA で他のアプリケーションにキーをコードを送り制御したく、Sendkeys を使ってみましたが、CTRLキー(単一キー)の送信が出来ません。Sendkeys "^", 1 では無反応。 制御されるアプリは右のCTRLキーと左のCTLキーではことなった動作をします。出来れば右のCTRLキー、左のCTLキーの送信方を教えてください。 VBAで負荷でしたら、Shell関数で呼び出せるようなものはありませんでしょうか。

  • キーボードがおかしい

    キーボードのshiftキーがおかしいです ちなみにwindows xpのノートパソコンです 具体的には左shiftをおしながら "A"や"S"や"D"を押しても反応してくれない また反応してくれるキーもあります 右shiftでも左を押したときとは違うキーが反応しません 他にゲームをしているときなんかは 左shiftを押しながらカーソルキー左,右,下は有効で上がききません また右shiftを押しながらだと逆に上しかききません これは単なる故障でしょうか? それとも何か設定がおかしいのでしょうか ご回答よろしくお願いします

  • エクセルVBA:インデンテーションの仕方

    エクセルVBAで、マクロ コードを書くとき ある一連の塊をインデンテーションするため右へずらすのはTABきーをつかえばできると思うんですが、右へ行き過ぎたのを左へ戻す方法はどうするのでしょうか。よろしくお願いします。

  • 左shiftキー + 1キー で、IEが起動

    新しく購入したキーボードで、左shiftキー + 1キー で、Internet Explorerが起動します。 右shiftキー + 1キーでは、!が入力できます。 今、使っているキーボードでは、右shiftキー + 1キーでも、左shiftキー + 1キー でも、!が入力できます。 これは、キーボードの不具合でしょうか。 何かご存じの方に教えていただけれたらと思います。 よろしくお願いします。

  • Access97のVBAでキーボードを制御する方法は?

    フォームなどの入力において、[Insert]キーが押されて、文字入力が上書きになっているかどうかを検出したい。また、VBAで上書きモードに設定したい。 キーボードの[Insert]キーを押すと、ステータスバーの右のほうに「OVR」と表示され、テキストボックスなどへの文字入力が、文字単位で上書きになります。この制御をVBAで行いたいのです。

  • エクセルでキーボードロック

    エクセルで、キーボードの任意のキー以外を ロックする方法はあるのでしょうか? キーボードをロックするマクロは、ネット上で発見したのですが、全てのキーがロックされてしまい、そのマクロを 応用すれば何とかなりそうなのですが、うまくいきません。 どなたか、良い方法をご存じないでしょうか?

  • ノートパソコンでキーボードの入力がおかしいので、教えて下さい。

    ノートパソコンでキーボードの入力がおかしいので、教えて下さい。 ノートPCは富士通FMV-NF50Xです。(OSはVISTA) 現象は数字の9のキーを押すと、shiftを押さなくても)が入力されます。 1~8までは正常に入力されます。 又、左shiftキーを押すと、(が入力されます。 又、右shiftキーは利きません。 また、BOOT起動のバックアップソフトで文字を入力する時も同じようになります。 これは、キーボードの故障でしょうか、 もし、機械的故障の可能性が高い場合、キーボード本体とマザーボードのどちらの 可能性が高いでしょうか、それを見極める方法はありますか?

  • EXCEL VBA(ワークシート上)でデータ入力の感知

    EXCEL VBAに関する質問です。(素人です) ワークシート上で金額、納入期限、利率を元に、延滞金が100、200、300~5,000円となる日の算出をボタンクリック行うロジックを作成しました。金額、納入期限、利率のいずれかの入力後、ボタンクリックすることなく出来るようしたいのですが、以下の方法ではダメでした。 ○ユーザー関数…for next,DO WHILE命令?使用の為機能せず。 ○SelectionChange…データ入力自体は感知しない。 ○Worksheet_Calculate…イベント発生が50回もあり不可。 何とかワークシート上でENTERキーを感知する方法はないでしょうか。

  • キーボードの「shift」キーが反応ありません。

    初心者です。 先日より、いつも使用する、左のshiftキーを押しながら「1」で、「!」が出なくなりました。 そこで、右のshiftキーを使用すると表示されることから、ゴミか、故障か?と思いましたが、 本日、左右とも押しても、表示されなくなりました。 ただ、右側がだめで、左側が、OKというランダムもあります。 完全にだめとは言い切れません・・・。 固定キーにはしてません。 これは、単なるゴミなのでしょうか?故障なのでしょうか。 よろしくお願いします。 Windows 7 64Bit マシンは自作で、キーボードはソニーで、2年使用。

  • Excel VBA の印刷後の判定

    いつもお世話になっています。 Excel VBA で不明な点が出てきたので質問させていただきます。 処理順として 1.AccessからExcelを出力し、出力後はそのまま表示しておく。 2.表示してあるExcelをユーザーが印刷する。 3.印刷したシートの見出しの色を変更する。 の3つなのですが、3の処理をExcelマクロで実行する際に、 印刷が実行されたかどうかの判別方法がわからないのです。 印刷直前でも構わないと思い、BeforePrint イベントを調べて使用してみたのですが、 印刷プレビューでもイベントが走ってしまい、ダメでした。 印刷実行なのか、プレビューなのか区別が出来る方法があればとも思っているのですが…。 ご存知の方、ご教授お願いいたします。

このQ&Aのポイント
  • プリンターの電源を入れっぱなしにすると、使用時の手間が省ける利点がありますが、長期間電源を入れっぱなしにすることで故障のリスクが高まる可能性もあります。
  • プリンターの電源を切り替える場合、消費電力の節約と故障リスクの軽減のため、長時間使用しない場合や就寝時などは電源を切ることをおすすめします。
  • また、プリンターの電源を入れっぱなしにしておくと、電源の供給が安定し、プリンターの起動時間が短縮されるなどのメリットもあります。ただし、定期的なメンテナンスや電源の不安定さを考慮する必要があります。
回答を見る

専門家に質問してみよう