【问题标题】:Automate saveas dialogue for IE9 (vba)为 IE9 (vba) 自动保存对话
【发布时间】:2014-11-20 04:50:49
【问题描述】:

我正在尝试从网站下载 Excel 表格。到目前为止,我已经实现了自动单击下载按钮(网络抓取)。现在ie9正在弹出另存为屏幕。我如何实现自动化?

【问题讨论】:

    标签: vba internet-explorer automation


    【解决方案1】:

    你可以试试这个,因为它在 IE9 上对我有用:

    1. 将文件C:\Windows\System32\UIAutomationCore.dll文件复制到用户文档,即C:\Users\admin\Documents,然后将引用UIAutomationClient添加到您的宏文件中。
    2. 将以下代码粘贴到您的模块中:

          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, "Save")
      
          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   
      

    尽你所能。

    【讨论】:

    • 当我尝试添加对 UIAutomationClient 的引用时,它会引发错误:“加载 DLL 时出错”。
    • 您必须将文件UIAutomationCore.dll 复制到您的文件夹中。
    • PtrSafe 未被识别。它说 Expected: Sub or Function
    • 小心!如果您是外国人,那么您应该正确更改按钮名称而不是“保存”,例如“Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "열기")”
    • If h = 0 Then Exit Sub之后如何关闭窗口?
    【解决方案2】:
    'This is a working code for vba in excel 2007 to open a file
    'But you need to add the "UIAutomationCore.dll" to be copied 
    'from "C:\Windows\System32\UIAutomationCore.dll" into the 
    'path "C:\Users\admin\Documents"    
    'The path where to copy may be different and you can find it when you check on 
    'the box for UIAutomationClient - the location is given under it.
    'Tools-references
    
    Option Explicit
      Dim ie As InternetExplorer
      Dim h As LONG_PTR
      Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LONG_PTR, ByVal hWnd2 As LONG_PTR, ByVal lpsz1 As String, ByVal lpsz2 As String) As LONG_PTR
    
    
    Sub click_open()
      Dim o As IUIAutomation
      Dim e As IUIAutomationElement
      Dim sh
      Dim eachIE
    
    Do
    
        Set sh = New Shell32.Shell
         For Each eachIE In sh.Windows
             ' Check if this is the desired URL
    
        ' Here you can use your condition except .html
        ' If you want to use your URL , then put the URL below in the code for condition check.
        ' This code will reassign your IE object with the same reference for navigation and your issue will resolve.
             If InStr(1, eachIE.LocationURL, "<enter your page url>") Then
             Set ie = eachIE
             Exit Do
             End If
         Next eachIE
     Loop
    
    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
    

    【讨论】:

      【解决方案3】:

      我把快捷键发到IE11了。

      注意:如果 IE 不是您机器上的活动窗口,代码将不会按您的预期运行,因此它在调试模式下将无法运行。快捷键和发送方法如下。

      • 快捷键:Alt+S
      • VBA:Application.SendKeys "%{S}"

      【讨论】:

        猜你喜欢
        • 2016-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 1970-01-01
        • 2015-08-06
        • 1970-01-01
        相关资源
        最近更新 更多