[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルマクロで右側のCtrlをキーボードから入力したかのようにする方法がわかりません』(あおうめ)
エクセルマクロでSendkeys等で右側のCtrlをキーボードから入力したかのようにする方法が分からず困っております。
どうやら左右のCtrlキーの判別が出来ていないようです。
分かる方いらっちゃいましたらご教授お願いいたします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
回答ではなく、確認です。
あなたのキーボードは左右のCTRLの機能に違いがあるのですか?
WindowsAPIで使用するキーコード表でも区別はされていませんね。
両方とも区別はしないのが前提と思っています。
もし、キーボードのキーの割当を変えているのであれば、
変更後の機能に沿ったものをSendKeysで指定すればよいと思います。
参考までに左右のCtrlを使い分ける趣旨を教えてください。後学のためです。
(γ) 2020/03/12(木) 16:16
当方のやりたいことですがエクセルマクロから別ソフトを操作したい
と思い別ソフトで右Ctrlキーが必要となるためです。
よろしくお願いします。
(あおうめ) 2020/03/12(木) 16:32
回答ありがとうございました。
そうですか、別アプリケーションですか。
APIを使ってキーストロークを送り込むことになるのでしょうね。
タイミングによる不安定という問題が残るかもしれません。
(γ) 2020/03/12(木) 16:45
ショートカットキーであれば、代わりにSendkeysでメニューを開き、右CTRLを使った場合と同じ動作をさせられるかもしれないのですが、これも対象が判らないと判断できないです。
対象となるアプリは、Excelマクロから起動して良いのか、それとも無関係に既に起動しているものなのかでもコードが違ってきますし、無関係の場合は、一意なクラス名またはウィンドウタイトル名からウィンドウハンドルを得るとか、APIを使いまくりになります。 キーを送る箇所だけでなく、送り先を特定するのも、それなりに難しいのですよ。
まずは、教えたキーワードでWeb検索し、見つけた情報をいろいろ試してみてください。 APIでキーを押すこと、離すことで、キーを押したのと同じ動作になります。
(???) 2020/03/12(木) 16:57
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _ ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Const KEYEVENTF_EXTENDEDKEY = &H1 Const KEYEVENTF_KEYUP = &H2 Const VK_RCONTROL = &HA3 Const VK_C = &H43
Sub test() keybd_event VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0 keybd_event VK_C, 0, KEYEVENTF_EXTENDEDKEY, 0 keybd_event VK_C, 0, KEYEVENTF_KEYUP Or KEYEVENTF_EXTENDEDKEY, 0 keybd_event VK_RCONTROL, 0, KEYEVENTF_KEYUP Or KEYEVENTF_EXTENDEDKEY, 0 End Sub
このまま動かしてもExcel上で動いてしまうので、対象となるアプリをアクティブにする必要があるでしょう。
(???) 2020/03/12(木) 17:52
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.