从Web下载VBA数据是否会影响其他任务?

从Web下载VBA数据是否会影响其他任务?,vba,excel,internet-explorer-11,Vba,Excel,Internet Explorer 11,使用VBA Excel是否可以在不影响其他任务的情况下从网站下载数据?我想要实现的是能够按下一个按钮,继续完成其他任务。现在,当我运行下面的代码时,我无法执行其他任务,否则代码将中断。感谢大家的帮助/投入 Public Sub Get_File() Dim sFiletype As String 'Fund type reference Dim sFilename As String 'File name (fund type + date of downloa

使用VBA Excel是否可以在不影响其他任务的情况下从网站下载数据?我想要实现的是能够按下一个按钮,继续完成其他任务。现在,当我运行下面的代码时,我无法执行其他任务,否则代码将中断。感谢大家的帮助/投入

Public Sub Get_File()

    Dim sFiletype As String     'Fund type reference
    Dim sFilename As String     'File name (fund type + date of download), if "" then default
    Dim sFolder As String       'Folder name (fund type), if "" then default
    Dim bReplace As Boolean     'To replace the existing file or not
    Dim sURL As String          'The URL to the location to extract information
    Dim pURL As String
    Dim Cell, Rng As Range
    Dim Sheet As Worksheet

    Dim oBrowser As InternetExplorer
    Set oBrowser = New InternetExplorer

    Dim StartTime As Double
    Dim SecondsElapsed As Double

    StartTime = Timer

    'Initialize variables
    Set Rng = Range("I2:I15")
    Set Sheet = ActiveWorkbook.Sheets("Macro_Button")

    For Each Cell In Rng
        If Cell <> "" Then
        sFiletype = Cell.Value
        sFilename = sFiletype & "_" & Format(Date, "mmddyyyy")
        sFolder = Application.WorksheetFunction.VLookup(Cell.Value, Sheet.Range("I2:Z15"), 2, False)
        bReplace = True
        sURL = "www.preqin.com"
        pURL = Application.WorksheetFunction.VLookup(Cell.Value, Sheet.Range("I2:Z15"), 16, False)

        'Download using the desired approach, XMLHTTP / IE
            If Application.WorksheetFunction.VLookup(Cell.Value, Sheet.Range("I2:Z15"), 15, False) = 1 Then
            Call Download_Use_IE(oBrowser, sURL, pURL, sFilename, sFolder, bReplace)
            Else
            Call Download_NoLogin_Use_IE(oBrowser, pURL, sFilename, sFolder, bReplace)
            End If

        Else: GoTo Exit_Sub
        End If
    Next

Exit_Sub:

    'Close IE
    oBrowser.Quit

    'Determine how many seconds code took to run
    SecondsElapsed = Round(Timer - StartTime, 2)
    MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation

End Sub

Private Sub Download_Use_IE(oBrowser As InternetExplorer, _
                            ByRef sURL As String, _
                            ByRef pURL As String, _
                            Optional ByRef sFilename As String = "", _
                            Optional ByRef sFolder As String = "", _
                            Optional ByRef bReplace As Boolean = True)

    Dim hDoc As HTMLDocument
    Dim objInputs As Object
    Dim ele As Object

    On Error GoTo ErrorHandler

    oBrowser.Visible = True

    'Navigate to URL
    Call oBrowser.navigate(sURL)
    While oBrowser.Busy Or oBrowser.readyState <> 4: DoEvents: Wend

    'Skips log in step if already signed into website
    On Error GoTo LoggedIn

    'Enter username
    oBrowser.document.getElementById("ctl00_ctl00_cphSiteHeader_ucLoginForm_user_email").Value = "XXX"
    oBrowser.document.getElementById("ctl00_ctl00_cphSiteHeader_ucLoginForm_user_password").Value = "XXX"

    'Submit the sign in
    oBrowser.document.getElementById("ctl00_ctl00_cphSiteHeader_ucLoginForm_btnLogin").Click
    'Wait for website to load
    While oBrowser.Busy Or oBrowser.readyState <> 4: DoEvents: Wend

LoggedIn:

'Initial data export
    oBrowser.navigate (pURL)
    'Wait for website to load
    While oBrowser.Busy Or oBrowser.readyState <> 4: DoEvents: Wend
    'Set the htmldocument
    Set hDoc = oBrowser.document

    'Loop and click the download file button
    Set objInputs = oBrowser.document.getElementsbyTagName("input")
    For Each ele In objInputs
        If ele.Title Like "Download Data to Excel" Then
            ele.Click
        End If
    Next

    'Wait for dialogue box to load
    While oBrowser.Busy Or oBrowser.readyState > 3: DoEvents: Wend
    Application.Wait (Now + TimeValue("0:00:02"))

    'IE 9+ requires to confirm save
    Call Download(oBrowser, sFilename, sFolder, bReplace)

Exit Sub

ErrorHandler:
    'Resume
    Debug.Print "Sub Download_Use_IE() " & Err & ": " & Error(Err)
End Sub
Public子Get_文件()
Dim sFiletype作为字符串“基金类型引用”
Dim sFilename作为字符串的文件名(基金类型+下载日期),如果为“”,则为默认值
Dim sFolder As String“文件夹名称(基金类型)”,如果为“”,则为默认值
是否替换现有文件
Dim sURL As String“提取信息的位置的URL”
像细绳一样发出低沉的咕噜声
暗淡单元格,Rng As范围
将工作表设置为工作表
作为InternetExplorer的Dim oBrowser
Set oBrowser=新的InternetExplorer
暗淡的开始时间是双倍的
模糊的二次选择为双色
开始时间=计时器
'初始化变量
设置Rng=范围(“I2:I15”)
Set Sheet=ActiveWorkbook.Sheets(“宏按钮”)
对于Rng中的每个单元
如果是单元格“”,则
sFiletype=单元格.Value
sFilename=sFiletype&“\uyyyy”格式(日期,“mmddyyyy”)
sFolder=Application.WorksheetFunction.VLookup(Cell.Value,Sheet.Range(“I2:Z15”),2,False)
bReplace=True
sURL=“www.preqin.com”
pURL=Application.WorksheetFunction.VLookup(Cell.Value,Sheet.Range(“I2:Z15”),16,False)
'使用所需的方法下载,XMLHTTP/IE
如果Application.WorksheetFunction.VLookup(Cell.Value,Sheet.Range(“I2:Z15”),15,False)=1,则
呼叫下载使用IE(浏览器、sURL、pURL、sFilename、sFolder、bReplace)
其他的
呼叫下载\u NoLogin\u使用\u IE(oBrowser、pURL、sFilename、sFolder、bReplace)
如果结束
其他:转到出口
如果结束
下一个
出口接头:
“接近
oBrowser.退出
'确定代码运行所需的秒数
SecondsElapsed=圆形(计时器-开始时间,2)
MsgBox“此代码在”&SecondsElapsed&“秒”内成功运行”,vbInformation
端接头
私有子下载\u使用\u IE(浏览器作为InternetExplorer_
ByRef sURL作为字符串_
ByRef pURL作为字符串_
可选的ByRef sFilename为String=“”_
可选ByRef sFolder As String=“”_
可选的ByRef bReplace为Boolean=True)
将hDoc设置为HTMLDocument
作为对象的模糊对象
作为对象的Dim ele
关于错误转到错误处理程序
oBrowser.Visible=True
'导航到URL
调用oBrowser.navigate(sURL)
当oBrowser.Busy或oBrowser.readyState 4:DoEvents:Wend时
'如果已登录到网站,则跳过登录步骤
关于错误转到LoggedIn
'输入用户名
oBrowser.document.getElementById(“ctl00\u ctl00\u cphSiteHeader\u ucLoginForm\u user\u email”).Value=“XXX”
oBrowser.document.getElementById(“ctl00\u ctl00\u cphSiteHeader\u ucLoginForm\u user\u password”)。Value=“XXX”
'提交登录
oBrowser.document.getElementById(“ctl00\u ctl00\u cphSiteHeader\u ucLoginForm\u btnLogin”)。单击
'等待网站加载
当oBrowser.Busy或oBrowser.readyState 4:DoEvents:Wend时
罗格丁:
'初始数据导出
oBrowser.navigate(pURL)
'等待网站加载
当oBrowser.Busy或oBrowser.readyState 4:DoEvents:Wend时
'设置htmldocument
设置hDoc=oBrowser.document
'循环并单击下载文件按钮
设置objInputs=oBrowser.document.getElementsbyTagName(“输入”)
对于objInputs中的每个ele
如果标题为“将数据下载到Excel”,则
ele.点击
如果结束
下一个
'等待对话框加载
当oBrowser.Busy或oBrowser.readyState>3:DoEvents:Wend时
Application.Wait(现在+时间值(“0:00:02”))
'IE 9+需要确认保存
呼叫下载(oBrowser、sFilename、sFolder、bReplace)
出口接头
错误处理程序:
"简历"
Debug.Print“Sub-Download\u-Use\u-IE()”&Err&“:”&Error(Err)
端接头
尝试

DoEvents
据我所知,使用后台进程和excel并不容易


干杯。

您不能在运行宏的工作簿上工作。如果要在宏运行时在Excel中工作,可以打开另一个Excel实例,或者打开运行宏的工作簿的只读副本


很难从您的问题中确定您是在Excel中谈论“其他任务”,还是仅仅在您的计算机上谈论。我上面的段落回答了在宏运行时是否可以在Excel中执行任务。

计算机一般情况。如果我点击屏幕上的其他地方阅读文章等,宏就会停止/返回错误。好的,我不确定这是否有帮助,但是您是否尝试过在开始时关闭
屏幕更新
,然后在结束时重新打开?不幸的是,没有成功-我在上面提供了额外的代码,以防有帮助…当您说“阅读文章等”时,您指的是在浏览器中执行另一项活动,还是在屏幕上单击任何程序?任何程序-它可能只是滚动另一个Excel工作簿、导航另一个网站、将PPT组放在一起等。想知道宏(从web检索数据并将其保存到特定文件夹)是否可以在后台运行而不被中断。