2012-05-01 60 views
10

Đây là câu hỏi đầu tiên của tôi ở đây trên stackoverflow!Tự động hóa Internet Explorer VBA - Cách chọn "Mở" khi tải xuống tệp

Tôi đã tìm kiếm giải pháp cho vấn đề này trong một thời gian và không tìm thấy bất kỳ trợ giúp nào. Tôi có thể chỉ đang sử dụng các từ khóa sai trong các tìm kiếm của mình, nhưng cho đến nay tôi đã không có may mắn. Đây là câu hỏi:

Trong VBA, làm thế nào tôi có thể chọn tùy chọn "Mở" từ hộp thoại tải xuống tệp trong Internet Explorer?

Chỉ cần làm rõ thêm, tôi đang nói về thanh màu vàng cam bật lên phía dưới màn hình trong IE9 khi tệp được tải xuống.

Tôi đang thực hiện một số tự động hóa VBA để tải xuống hàng trăm tệp PDF từ web bằng Internet Explorer, nhưng có bước trung gian nơi tệp .fdf phải được mở trước khi tôi nhận được tệp PDF thực. Vì vậy, trước tiên tôi cần phải chọn tùy chọn "Mở" để tôi có thể chuyển sang bước tiếp theo của tự động hóa. Như tôi đã nói trước đó, tôi đã thực hiện rất nhiều tìm kiếm và không có may mắn cho đến nay.

Tôi đã thử sử dụng SendKeys với hy vọng rằng đánh Nhập sẽ hoạt động và đó là nỗ lực cuối cùng không hoạt động.

Cảm ơn bạn đã trợ giúp!

+1

+ 1 Một câu hỏi tốt :) –

+0

Bạn đã xem là sử dụng URLDownloadToFile để lấy các tập tin trực tiếp? http://www.vbaexpress.com/forum/showthread.php?t=33145 –

+1

Tôi thực sự đã thử URLDownloadToFile, nhưng tất cả các tệp này đều nằm trên trang web được bảo vệ bằng mật khẩu và tôi không thể tìm ra cách để vượt qua bằng chứng xác thực . –

Trả lời

4

Tôi đã đề cập đến điều này rộng rãi tại đây.

Topic: VBA/VB.Net/VB6-Click Open/Save/Hủy Nút trên IE Tải cửa sổ - PHẦN I

Liên kết: http://www.siddharthrout.com/2011/10/23/vbavb-netvb6click-opensavecancel-button-on-ie-download-window/


EDIT (IMP) Nếu bạn đang sử dụng IE 9 Đừng quên đọc PHẦN 2 vì nó bao gồm và bao gồm các cấu trúc cửa sổ của IE 9 cửa sổ download


Topic: VBA/VB.Net/VB6-Click Open/Save/Hủy Nút trên IE Tải cửa sổ - PHẦN II

Liên kết: http://www.siddharthrout.com/2012/02/02/vbavb-netvb6click-opensavecancel-button-on-ie-download-window-part-ii/

Các liên kết ở trên thảo luận về cách sử dụng API để đạt được những gì bạn muốn.

Từ liên kết 1 ...

Giống như bạn và tôi, cả hai chúng tôi có tên, tương tự như các cửa sổ đã “xử lý” (hWnd), Class vv Một khi bạn biết điều đó có hWnd là, nó là dễ tương tác hơn với cửa sổ đó.

Findwindow API tìm hWnd của cửa sổ cụ thể bằng cách sử dụng tên lớp và chú thích của cửa sổ (“Tải xuống tệp”) trong trường hợp này.Các nút "Open", "Save" và "Cancel" là các cửa sổ trong chính nó nhưng chúng là các cửa sổ con của cửa sổ chính là "Tải xuống tệp". Điều đó có nghĩa là mỗi một trong số đó cũng sẽ có một hWnd :) Để tìm các cửa sổ con, chúng tôi không sử dụng FindWindow nhưng sử dụng FindWindowEx. Cả ba nút “Mở”, “Lưu” và “Hủy” đều có cùng một lớp là “Nút”.

+0

Tôi khá mới với VBA, vì vậy tôi không chắc chắn làm thế nào để sử dụng API FindWindowEx. Tôi đặt khai báo hàm vào mã của tôi và nó nói nó cần được cập nhật cho hệ thống 64 bit. –

+0

Bạn đã đọc xong chưa? :) –

+0

Chỉ cần thêm thuộc tính PtrSafe, mà dường như để sửa chữa mọi thứ. Tôi sẽ đi cho nó một shot ngay bây giờ. –

1

bài tương tự: link

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 
+0

Điều này làm 'Dim o như IUIAutomation' nhưng sau đó' Set o = mới CUIAutomation', do đó, một trong hai có vẻ sai với tôi? Tôi biết rất ít về VBA, vì vậy tôi không chắc chắn nên được điều chỉnh ;-) – Carpetsmoker

0

tôi đã gửi các phím tắt cho ứng dụng. Ở đây chúng dành cho IE11. Xin lỗi tôi không thể kiểm tra trong IE9. Nếu bạn giữ Alt, nó có thể hiển thị cho bạn khóa khác để kết hợp như IE11.

Lưu ý: mã sẽ không chạy như bạn mong đợi nếu IE không phải là cửa sổ đang hoạt động trên máy của bạn để nó không hoạt động khi đang ở chế độ gỡ lỗi. chìa khóa

  • Phím tắt: Alt + O
  • VBA: Application.SendKeys "%{O}"
Các vấn đề liên quan