Internet Explorer で、「ダウンロードの表示」のDialogウィンドウをショートカット(Ctrl + J )を使って表示させたいのですが、Excel VBA で以下のコードで試したのですが、うまくいきません。どういうコードを書いたらよいのでしょうか?アクセスキーを使った方法では、「ツール」で N に該当するのが「ダウンロードの表示」と「Send To Note」の2つあって起動できません。
よろしくお願いします。
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const VK_CONTROL = &H11
Public Const VK_J = &H4A
Public Const navOpenInNewTab = &H800
Sub Test()
Dim objIE As Object
Dim hWnd_objIE As Long
Dim Ret As Long
'IE起動
Set objIE= CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "https://www.google.co.jp/", navOpenInNewTab
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Loop
'objIEのhWnd取得
hWnd_objIE = objIE.hwnd 'IEの親ウィンドウのhWnd取得する
'hWnd_objIE のウィンドウにPostMessageする
Ret = PostMessage(hWnd_objIE, WM_KEYDOWN, VK_CONTROL, 0)
Ret = PostMessage(hWnd_objIE, WM_KEYDOWN, VK_J, 0)
Sleep 100
Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_CONTROL, 0)
Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_J, 0)
End Sub
No.4ベストアンサー
- 回答日時:
SendKeysはアクティブウィンドーに対しての動作なので、電卓がアクティブになっている場合はキーストロークは電卓に送られます
SendKeysで電卓を操作する例
http://www.atmarkit.co.jp/ait/articles/0709/12/n …
IEの操作にかぎらず常にアクティブなウィンドーに対しての動作になります、複数のウィンド操作が必要な場合はSendKeysを実行する前に対象のウィンドをアクティブにする必要があります
SendKeysの便利なところは
VBS で IEを使用して楽天市場にログインしてみた(ken3memo 三流君)
http://d.hatena.ne.jp/ken3memo/20110721/1311244241
↑
この場合はページのHTMLソースからテキストボックスの名前(name)を調べておく必要が有る
ただ、楽天のログインページは開いた時点でユーザー名の入力ボックスにターゲットが移っている状態なのでSendKeysを利用して
ページが表示されたら
SendKeys "ユーザー名"
SendKeys "{TAB}"
SendKeys "パスワード"
SendKeys "{ENTER}"
を実行するだけでログインが出来る、ページの体裁が変わると対応はできなくなるのが欠点ですが
まあ、これは余分な説明だったけど
アクティブウィンドウに対しての操作は希望していなかったのですが、以後の回答がなく、一応SendKeysで操作もできるので、ベストアンサーとします。
他の回答も含め、忙しい中、回答くださった方に御礼申し上げます。
No.3
- 回答日時:
No1です
>他の作業に支障はないのでしょうか?
ちょっと質問の意図が理解できないのですが?
SendKeys "^j", True
↑
これはアクティブなウィンドーに対し[Ctrl]+Jのキーストロークを送っているだけ
ダウンロードの表示なら
SendKeys "%{X}N", True
でも実行可能
アクティブウィンドーに対しての動作なので、他の作業には影響しないと思いますが、何が不安なのでしょうか?
回答ありがとうございます。
前の例・・・他の作業(別ウィンドウでIE操作)が可能なコード という例がよくありませんでした。他の作業をIEでなく、メモ帳や電卓操作をマクロ実行中に行っていた場合、ActiveWindowがIEでなく、メモ帳や電卓に移った場合に支障をきたさないかを心配しております。
分かりにくい例や表現で申し訳ないです。
No.2
- 回答日時:
ご質問自体の操作の『「Send To Note」の2つあって』という所が、私は分かっていないのですが、PostMessage で、最初、Ctrl + Jを送った後に、その子Windowの中の操作と違いますか?
そうしたら、二番目の
Sleep 100
Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_CONTROL, 0)
Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_J, 0)
hWnd_objIEは、違っていると思います。もう一度、子Windowのハンドルを取得しなおさないといけないような気がしますね。その他にも、objIEのオブジェクトで、ExecWB定数でダウンロードする方法もあるような気がします。ただし、実行そのもののキーは、やっぱりWin32APIになるかもしれません。
想像で申し訳ありませんが、"SendKey"は、最上位にあるWindow操作する可能性が高いので、Windowを前面に持ってくるか、Windowのハンドルを取らないと、うまく行かない可能性がありますね。そうすると、結果的に、Win32APIに頼らざるを得ないはずです。
No.1
- 回答日時:
SendKeysじゃなにか不都合があるのかな?
Sub Test()
Dim objIE As Object
Dim hWnd_objIE As Long
Dim Ret As Long
'IE起動
Set objIE= CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "https://www.google.co.jp/", navOpenInNewTab
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Loop
SendKeys "^j", True
End Sub
ご回答ありがとうございます。
SendKeysで動きました。
自分としては、マクロ実行中でも他の作業(別WindowでIE操作など)が可能なコードを作りたいのですが、他の作業に支障はないのでしょうか?
私が調べたところでは、SendkeysはActiveWindowに対してキーストロークを渡すとありました。 http://officetanaka.net/excel/vba/statement/Send …
他の作業に支障の出ないコードの例を教えてください。
API初心者で、質問ばかりで申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
電卓での二乗のやり方
-
iPhoneの電卓
-
電卓で3割引とかの計算の仕方
-
電卓で8分の1の打ち方を教えて...
-
電卓の「MU」キーって何ですか?
-
ルートの中に少数がある場合ど...
-
人口の0.7%って、何人?
-
長方形の対角の寸法を普通の電...
-
関数電卓のDEGやHYPやF-Eの意味...
-
tanΘを出すときの電卓の使い方
-
電卓 分数計算のしかたを、教え...
-
シャープの電卓を使っているの...
-
計算機で同じ数を掛け算する方法
-
電卓計算(掛け算と足し算)
-
電卓で、割り算、掛け算の順番...
-
手数料が加算される計算方法
-
計算機で分数の計算をする方法...
-
電卓の中に水が入ってしまった...
-
私の電卓が間違った答えを出し...
-
電卓の計算結果を解説してほし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電卓での二乗のやり方
-
iPhoneの電卓
-
電卓で3割引とかの計算の仕方
-
電卓の「MU」キーって何ですか?
-
ルートの中に少数がある場合ど...
-
人口の0.7%って、何人?
-
電卓で8分の1の打ち方を教えて...
-
tanΘを出すときの電卓の使い方
-
長方形の対角の寸法を普通の電...
-
長い間ほったらかしにしてた、...
-
電卓のキーが固くなってしまい...
-
手数料が加算される計算方法
-
エクセルで、同一セル内に自動...
-
電卓計算(掛け算と足し算)
-
計算機で割り算の余りを出す方...
-
16000000円の1,000分の...
-
電卓でWindowsのCtrl+Zみたいな...
-
電卓の計算結果を解説してほし...
-
電卓の中に水が入ってしまった...
-
電卓やキーボードの音について
おすすめ情報