Excel 等待VBA中出现“下载”对话框

Excel 等待VBA中出现“下载”对话框,excel,vba,Excel,Vba,我正在编写一个脚本,该脚本将自动从URL下载excel。我面临的问题是,对话框出现的时间不是固定的,因此我无法硬编码等待时间。 我需要一个代码,它将等待对话框出现,然后单击另存为按钮。 提前感谢我不确定您指的是什么类型的对话框,但这里有几个脚本可以从web下载文件 将其放入单元格A1: 把这个放在B1单元: C:\Users\user\Desktop\或要将文件下载到的路径 将其放入单元格C1: 文件下载成功 运行此代码 Private Declare Function URLDownload

我正在编写一个脚本,该脚本将自动从URL下载excel。我面临的问题是,对话框出现的时间不是固定的,因此我无法硬编码等待时间。 我需要一个代码,它将等待对话框出现,然后单击另存为按钮。
提前感谢

我不确定您指的是什么类型的对话框,但这里有几个脚本可以从web下载文件

将其放入单元格A1:

把这个放在B1单元: C:\Users\user\Desktop\或要将文件下载到的路径

将其放入单元格C1: 文件下载成功

运行此代码

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
  "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
    szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private Sub pMain()
  Dim sURL As String
  Dim sDestination As String
  Dim bSuccess As Boolean
  Dim lRow As Long
  Dim ws As Excel.Worksheet
  Dim strSavePath As String
  Dim URL As String, ext As String
  Dim buf, ret As Long

  'Change to suit
  Set ws = ThisWorkbook.Worksheets("Sheet1")

  With ws
    For lRow = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
      sURL = .Cells(lRow, "A")
      sDestination = .Cells(lRow, "B")

      buf = Split(sURL, ".")
      ext = buf(UBound(buf))

        pos = InStrRev(sURL, "/", -1)
        file = Mid(sURL, pos + 1, 99)
        strSavePath = sDestination & file
        ret = URLDownloadToFile(0, sURL, strSavePath, 0, 0)
            If ret = 0 Then
                .Cells(lRow, "C") = "File download successfully!"
            Else
                .Cells(lRow, "C") = "Couldn't download the file!"
            End If

      DoEvents
    Next lRow
  End With
End Sub
还有,试试这个

专用声明函数URLDownloadToFile Lib“urlmon”别名_ “URLDownloadToFileA”(ByVal pCaller为长,ByVal szURL为字符串,ByVal_ szFileName作为字符串,ByVal dwReserved作为Long,ByVal lpfnCB作为Long)作为Long


我不确定你指的是什么样的对话框,但这里有几个脚本可以从网上下载文件

将其放入单元格A1:

把这个放在B1单元: C:\Users\user\Desktop\或要将文件下载到的路径

将其放入单元格C1: 文件下载成功

运行此代码

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
  "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
    szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private Sub pMain()
  Dim sURL As String
  Dim sDestination As String
  Dim bSuccess As Boolean
  Dim lRow As Long
  Dim ws As Excel.Worksheet
  Dim strSavePath As String
  Dim URL As String, ext As String
  Dim buf, ret As Long

  'Change to suit
  Set ws = ThisWorkbook.Worksheets("Sheet1")

  With ws
    For lRow = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
      sURL = .Cells(lRow, "A")
      sDestination = .Cells(lRow, "B")

      buf = Split(sURL, ".")
      ext = buf(UBound(buf))

        pos = InStrRev(sURL, "/", -1)
        file = Mid(sURL, pos + 1, 99)
        strSavePath = sDestination & file
        ret = URLDownloadToFile(0, sURL, strSavePath, 0, 0)
            If ret = 0 Then
                .Cells(lRow, "C") = "File download successfully!"
            Else
                .Cells(lRow, "C") = "Couldn't download the file!"
            End If

      DoEvents
    Next lRow
  End With
End Sub
还有,试试这个

专用声明函数URLDownloadToFile Lib“urlmon”别名_ “URLDownloadToFileA”(ByVal pCaller为长,ByVal szURL为字符串,ByVal_ szFileName作为字符串,ByVal dwReserved作为Long,ByVal lpfnCB作为Long)作为Long


谢谢你花时间回答我的问题

我终于找到了解决这个问题的方法。我使用了下面的代码

Dim website
website = "http://yoursite.com"
With IE
    .Visible = True
    .navigate website
End With

Application.Wait (Now + TimeValue("0:00:02"))
Cells(1, 1) = GetTitle
var = CheckTitle(Cells(1, 1))
Do While var = False
    Cells(1, 1) = GetTitle
    var = CheckTitle(Cells(1, 1))
Loop
Cells(1, 1) = ""
函数GetTitle()

端函数

函数CheckTitle(checkval为字符串)为布尔值

If checkval <> "Internet Explorer" Then
    CheckTitle = False
    Application.Wait (Now + TimeValue("0:0:10"))
Else
    CheckTitle = True
End If
如果选中val“Internet Explorer”,则
CheckTitle=False
Application.Wait(现在+时间值(“0:0:10”))
其他的
CheckTitle=True
如果结束

结束函数

感谢您抽出时间回答我的问题

我终于找到了解决这个问题的方法。我使用了下面的代码

Dim website
website = "http://yoursite.com"
With IE
    .Visible = True
    .navigate website
End With

Application.Wait (Now + TimeValue("0:00:02"))
Cells(1, 1) = GetTitle
var = CheckTitle(Cells(1, 1))
Do While var = False
    Cells(1, 1) = GetTitle
    var = CheckTitle(Cells(1, 1))
Loop
Cells(1, 1) = ""
函数GetTitle()

端函数

函数CheckTitle(checkval为字符串)为布尔值

If checkval <> "Internet Explorer" Then
    CheckTitle = False
    Application.Wait (Now + TimeValue("0:0:10"))
Else
    CheckTitle = True
End If
如果选中val“Internet Explorer”,则
CheckTitle=False
Application.Wait(现在+时间值(“0:0:10”))
其他的
CheckTitle=True
如果结束

结束函数

?请显示您正在尝试使用的代码。如果不显示您的代码,就很难对可能是非常具体的问题提出适当的解决方案。这可能有用,也可能不有用(我很难知道,因为我不知道您已经尝试了什么…?请显示您正在尝试使用的代码。如果不显示您的代码,就很难对可能是非常具体的问题提出适当的解决方案。这可能有用,也可能不有用(我很难知道,因为我不知道您已经尝试了什么…)您好,感谢replyDim网站=“&server&”&c=0&sd=“&fDate&”&ed=“&lDate&”“&theme id=portal&r=excel”“使用IE.Visible=True。在IE.Busy或IE.readyState 4事件循环结束时浏览网站。我正在使用此代码打开将开始处理的网页。处理完成后,将显示下载对话框。我可以使用SendKeys处理对话框。此处的处理时间不是固定的,它取决于要下载的excel工作簿的大小。这就是为什么我不能硬编码等待时间并等待对话框出现,然后进行进一步处理的原因。这里提到的URL位于客户端网络上,我猜您将无法访问它。您好,感谢replyDim网站=“&server&”&c=0&sd=“&fDate&”&ed=“&lDate&”&theme id=portal&r=excel”当IE.Visible=True时,在IE.Busy或IE.readyState 4事件循环结束时浏览网站。我正在使用此代码打开将开始处理的网页。处理完成后,将显示下载对话框。我可以使用SendKeys处理对话框。此处的处理时间不是固定的,它取决于要下载的excel工作簿的大小。这就是为什么我不能硬编码等待时间,并等待对话框出现,然后进行进一步的处理。这里提到的URL位于客户端网络上,我猜您将无法访问它。