VBA继续,无需等待第二个工作簿打开/关闭

时间:2018-05-03 14:32:25

标签: excel-vba vba excel

我循环浏览我要打开的网站中的csv文件列表并从中提取数据。我使用VBA的原因是因为我需要打开的特定文件每天都有所不同,而这些特定的文件引用只能在excel视图中使用。第二个原因是因为我已经在vba中制作了类似的抓取应用程序,所以我已经有了一半的代码。

该应用程序的最终用户并不需要干净或快速的代码,只需它可以正常工作,因为现在手动检查这些文件是每天2小时的日常工作。

到目前为止,我已经登录了存储第二个文件的网站(这个网站没有API,所以我正在抓取它)我通过点击代码来打开这些文件按钮。然后代码单击导出按钮,打开对话框

open, save (dropdown), cancel

我只想打开并提取数据然后关闭,因此我使用VBA Internet Explorer Automation - How to Select "Open" When Downloading a File中的代码。感觉就像我的代码在这一部分上喋喋不休......

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
Dim ie As InternetExplorer
Dim h As LongPtr

Function 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 Function

    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 Function

在调用此函数之前,我检查工作簿的数量,并使excel等待20秒,直到打开另一个工作簿。我用这段代码做到了

    xnum1 = Application.Workbooks.Count

    Download

    t = Now
    tStop = t + TimeValue("00:00:20") 'Adjust the TimeValue as needed "hh:mm:ss"
    Do Until t = tStop Or Application.Workbooks.Count > xnuml
        DoEvents
        t = Now
    Loop

然而,似乎即使有这个等待时间,excel也不想在每个循环期间打开文件。如果我一步一步地运行它,它会打开文件,当我让它运行时,它不会。

下载文件后,我将数据导出到主文件,然后使用 Application.DisplayAlerts 关闭它,以确保没有对话框阻止文件关闭。但是因为下载中的代码错误,我发现文件打开的时间太晚,然后它没有关闭,并且因为它们都具有相同的文件名,所以我在主代码中做了额外的安全措施: / p>

    xnum1 = Application.Workbooks.Count
    For y = 1 To xnum1
        If Left(Application.Workbooks(y).Name, 10) = "export.csv" Then
            Application.Workbooks(y).Close
        End If
    Next

我似乎无法弄清楚为什么excel没有正确打开文件然后正确关闭它们......似乎代码只是运行,进入错误模式因为文件没有'在第二次运行中打开,虽然代码本身没有给出错误,即使我单步执行它。

我的直觉告诉我,这个下载功能是问题所在,但我无法指出如何修复它......

我还尝试使用sendkeys%{O},即点击打开的快捷键,但这也没有打开文件。当我手动点击alt + O时,它会打开文件...

有什么建议吗?

0 个答案:

没有答案