web-dev-qa-db-ja.com

VBA Internet Explorerオートメーション-ファイルをダウンロードするときに「開く」を選択する方法

これは、stackoverflowに関する私の最初の質問です!

私はしばらくの間、この問題の解決策を探していましたが、助けが見つかりませんでした。検索で間違ったキーワードを使用しているだけかもしれませんが、これまでのところ運がありません。ここに質問があります:

VBAでは、Internet Explorerのファイルダウンロードダイアログから[開く]オプションを選択するにはどうすればよいですか?

わかりやすくするために、ファイルをダウンロードしたときにIE9の画面の下部に表示される黄色がかったオレンジ色のバーについて話しています。

Internet Explorerを使用してWebから何百ものPDFをダウンロードするためにVBA自動化を行っていますが、実際のP​​DFに到達する前に.fdfファイルを開く必要がある中間ステップがあります。したがって、最初に「開く」オプションを選択して、オートメーションの次のステップに進むことができるようにする必要があります。前に言ったように、私は多くの検索を行っており、今のところ運がありません。

ヒットすることを期待してSendKeysを使用してみました Enter うまくいくでしょう、そしてそれはうまくいかなかった最後の溝の努力でした。

助けてくれてありがとう!

12
Lane Sawyer

私はこれをここで広範囲にカバーしました。

トピックVBA/VB.Net/VB6–Open/Save/Cancel Button on IEダウンロードウィンドウ–パートI

リンクhttp://www.siddharthrout.com/2011/10/23/vbavb-netvb6click-opensavecancel-button-on- ie-download-window /

そして


EDIT(IMP)IE 9を使用している場合PART 2は、IE 9ダウンロードウィンドウ


トピックVBA/VB.Net/VB6–Open/Save/Cancel Button on IEダウンロードウィンドウ–パートII

リンクhttp://www.siddharthrout.com/2012/02/02/vbavb-netvb6click-opensavecancel-button-on- ie-download-window-part-ii /

上記のリンクでは、APIを使用して目的を達成する方法について説明しています。

最初のリンクから...

あなたや私と同じように、私たちには両方とも名前があります。同様に、ウィンドウには「ハンドル」(hWnd)、クラスなどがあります。そのhWndが何であるかがわかれば、そのウィンドウを操作するのが簡単になります。

Findwindow APIは、この場合、クラス名とウィンドウのキャプション(「ファイルのダウンロード」)を使用して、特定のウィンドウのhWndを見つけます。 「開く」、「保存」、「キャンセル」ボタンはそれ自体がウィンドウですが、「ファイルのダウンロード」であるメインウィンドウの子ウィンドウです。つまり、それぞれにhWndも含まれます。:)子ウィンドウを見つけるために、FindWindowではなくFindWindowExを使用します。 「開く」、「保存」、「キャンセル」の3つのボタンはすべて、「ボタン」という同じクラスを持っています。

4
Siddharth Rout

ショートカットキーをアプリケーションに送信しました。ここではIE11用です。 IE9ではテストできませんでした。押し続けると Alt、IE11と同様に、コンボの他のキーが表示される場合があります。

注:IEがマシンのアクティブなウィンドウでない場合、コードは期待どおりに実行されないため、デバッグモードでは機能しません。

  • ショートカットキー:Alt+O
  • VBA:Application.SendKeys "%{O}"
1
Tony L.

同様の投稿: リンク

    Option Explicit
    Dim ie As InternetExplorer
    Dim h As LongPtr
    Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr

Sub Download()
    Dim o As IUIAutomation
    Dim e As IUIAutomationElement
    Set o = New CUIAutomation
    h = ie.Hwnd
    h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
    If h = 0 Then Exit Sub

    Set e = o.ElementFromHandle(ByVal h)
    Dim iCnd As IUIAutomationCondition
    Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Open")

    Dim Button As IUIAutomationElement
    Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
    Dim InvokePattern As IUIAutomationInvokePattern
    Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
    InvokePattern.Invoke
End Sub 
1
user2444791