質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1332閲覧

プラグインが入った別ブックにALTキーなどを送って操作したい

tracky

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2021/04/25 12:35

編集2021/04/27 11:39

プラグインが入った別ブックに、操作用のブックからALTキーなどを送ってプラグインを、
バックグランドで操作したいのでSendKeyやkeybd_evenを使わない方法を検討しています。

<問題点>
下記コードで(学習のため)メモ帳での操作と、別ブック(Data.xlsx)の操作をトライしているのですが、メモ帳のテストでは文字を入力できましたが、ALTキーが入力できません。
エクセルのテストではいずれもできません。
どこを修正すればよいかご教授頂けますでしょうか?

VBA

1Const WM_KEYDOWN = &H100 2Const VK_MENU = &H12 3Const WM_SYSKEYDOWN = &H104 4Const VK_F = &H46 5 6Sub Main() 7Dim hApp As Long 8Dim hEdit As Long, hEdit2 As Long, Res As Long 9 10'メモ帳 11hApp = FindWindow("NotePad", vbNullString) 12hEdit = FindWindowEx(hApp, 0, "Edit", vbNullString) 13Res = PostMessage(hEdit, WM_KEYDOWN, VK_MENU, 0) 'ALT 反応なし 14Res = PostMessage(hEdit, WM_KEYDOWN, VK_F, 0) 'F 入力可能 15 16'エクセル 17hApp = FindWindow("XLMAIN", vbNullString) 18hEdit = FindWindowEx(hApp, 0, "XLDESK", vbNullString) 19hEdit2 = FindWindowEx(hEdit, 0, vbNullString, "Data.xlsx") 20Res = PostMessage(hEdit2, WM_KEYDOWN, VK_MENU, 0) 'ALT 反応なし 21Res = PostMessage(hEdit2, WM_KEYDOWN, VK_F, 0) 'F 反応なし 22 23End Sub

Wndows10/office2019

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

試行錯誤した結果、押下するキーを引数としたUWSCを実行することでできました。

<VBA> Sub test() Dim wb(2) Set wb(0) = ThisWorkbook Set wb(1) = Workbooks("Data.xlsx") Dim WSH As Variant Set WSH = CreateObject("WScript.Shell") 'キーを変数に設定 キー、キー、・・・ HIKISUU1 = "VK_MENU,VK_W,VK_Z,VK_S,VK_V,VK_F" 'ALT W ZS VF 数式バー表示 HIKISUU1 = wb(1).Name & " " & HIKISUU1 'ファイル名追加 'WSHで同期させ実行 With CreateObject("Wscript.Shell") .Run ("""" & ThisWorkbook.Path & "\SendKey3.exe" & """" & " " & HIKISUU1), 0, True End With End Sub <UWSC> //ExcelのID取得 id = getid(PARAM_STR[0]) //キー操作 KeyStr= PARAM_STR[1] for i=2 to Length(PARAM_STR)-1 KeyStr=KeyStr + "," + PARAM_STR[i] next //実行 eval("sckey(id, " + KeyStr + ")")

投稿2021/05/03 08:23

tracky

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問