【问题标题】:SendKeys to open Excel file from Internet ExplorerSendKeys 从 Internet Explorer 打开 Excel 文件
【发布时间】:2018-01-26 21:10:03
【问题描述】:

下载会跳过宏的其余部分。

目前我有一个子程序用于进入网页并下载文件。它会打开一个栏,询问“打开、保存、另存为”我使用发送键%O 打开文件。文件打开后,我想使用另一个代码来处理文档,问题是文件仅在宏的其余部分完成后打开。由于某种原因,它基本上跳过了我的宏的其余部分。

这是我正在做的一个例子:

Sub iaspull()

    Set ie = CreateObject("InternetExplorer.Application")
    my_url = "***"
    With ie
        .Visible = True
        .navigate my_url
        Do Until Not ie.Busy And ie.readyState = 4
            DoEvents
        Loop
        ' Some code to get to the file and click download
    End With

    Application.Wait (Now + TimeValue("00:00:08"))
    Application.SendKeys "%{O}", True
    DoEvents

End Sub

Sub enable_edit()
    Application.ActiveProtectedViewWindow.Edit
End Sub

一旦代码到达.SendKeys "%{O}",它就可以打开,但如果后面有更多代码,它就会跳过代码。

我希望能够一个接一个地运行这两个子例程。我宁愿不保存或使用另存为功能来保持这个更通用。

请告诉我你的想法!

【问题讨论】:

  • 在某一时刻,您有“End Sub”,然后是“Sub enable_edit()”。这将结束第一个宏并开始一个新宏。这是期望的行为吗?
  • 这是我尝试解决的问题,以使第一个宏结束并打开文件。
  • @Sam 所以这篇文章建议我创建发送密钥作为子程序,以便与我的原始子程序一起使用?我对如何使用这篇文章感到困惑。尽管如此,非常感谢您的评论!
  • @metalmania7778 然后尝试使用Workbooks.Open Method而不是.SendKeys打开文件,避免异步打开。 DoEvents 循环内直到目标文件在打开之前存在,然后.Wait 也不是必需的。问题中的第一句话还指出“下载跳过了宏的其余部分”,如果您确定下载工作正常,那么最好对其进行编辑。

标签: vba excel web-scraping automation sendkeys


【解决方案1】:

我猜如果你使用SendKeys,你基本上不会对应用程序说它必须是Visible。我不确定应用程序是否加载或只是不可见,但(感谢@omegastripes)知道这是一个用Excel打开的文件,我会也写过类似的东西:

Dim DownloadedFileFilename As String ' you save here your downloaded file name
Dim EA As Excel.Application
Dim DownloadedFile As Workbook

Set EA = New Excel.Application
With EA
    .Visible = True ' Just to make sure
    .ScreenUpdating = True  ' Just to make sure
    Set DownloadedFile = .Workbooks.Open(Filename:=DownloadedFileFilename), ReadOnly:=True)
    ' [DO STUFF]
End With

恕我直言,这是最安全的方法,另外您还有机会Set 变量到Nothing,这也是释放它们的安全方法。

【讨论】:

  • 我正在使用 VBA 运行这个脚本来自动化网络,所以 excel 已经打开并且可见。当您想从 Internet 下载文件时,IE 会弹出一个下载窗口。要下载文件,我将密钥发送到打开选项。如果您的代码可以绕过可行的发送密钥功能,但如果不能,那么发送密钥选项仍会绕过任何代码的其余部分,直到打开 excel 文件。遗憾的是你的代码没有工作,但我真的很感激你的努力,谢谢你。
  • 几个问题:我猜你的 Excel 文件中有一些代码。您是否有可能在vbModal 中打开任何内容?您正在使用的某些用户表单是否有可能以某种方式使代码卡住?你在代码中使用了On Error Resume Next 吗?
  • 感谢您的回复,很好的问题。我没有使用 vbmodal,在这段代码中我也没有使用任何 On Error Resume Next。我相信我在某处读到发送密钥可能会卡住,这可能是跳过其余代码的原因。但最终打开一个新文档的过程搞砸了我的代码。
猜你喜欢
  • 2022-06-23
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 2010-10-11
  • 2019-04-02
相关资源
最近更新 更多