当使用 VBA 直接从 Internet Explorer 打开 CSV 文件时,我无法与该文件进行交互。

克里斯蒂安·T

所以我编写了一些代码,通过模拟按钮点击从 twitter 下载分析数据。这不是漂亮的代码,但我现在可以找到它的全部工作。

我成功地点击了文件下载,之后会出现一个带有打开、保存选项的“框架通知栏”。我成功地单击打开两次,但是这是我遇到问题的地方。问题是我然后想与我刚刚选择打开的 CSV 文件中的数据进行交互,但是 CSV 文件直到代码完成运行后才存在。我知道必须有一个简单的解决方案,但我只是不知道要搜索什么。

我曾尝试使用 Wait 和 DoEvents 来查看是否有帮助,但到目前为止还没有运气。这是我的代码:

Private Sub CommandButton1_Click()

UserForm1.Hide
Dim appIE As Object
Set appIE = CreateObject("internetexplorer.application")


With appIE
    .Navigate "https://analytics.twitter.com/user/QinetiQ/tweets"
    .Visible = True
End With
Do While appIE.Busy
    DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:04"))

Set HTMLDoc = appIE.document
    Set btn = HTMLDoc.getElementsByClassName("btn btn-default ladda-button")(0)
    btn.Click
    Application.Wait (Now + TimeValue("0:00:07"))
    Application.SendKeys "%{S}"

Dim o As IUIAutomation
    Dim e As IUIAutomationElement
    Set o = New CUIAutomation
    Dim h As Long
    h = appIE.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
    Application.Wait (Now + TimeValue("0:00:03"))
    SendKeys "%(o)"
    Dim wb As Workbook
    DoEvents

    Application.Wait (Now + TimeValue("0:00:15"))
    Set wb = GetWB
    Dim ws As Worksheet
    Set ws = wb.ActiveSheet

End Sub

Function GetWB() As Workbook
    Dim wb As Workbook
 wbName = "tweet"

    For Each wb In Application.Workbooks
        If wb.Name Like wbName & "*" Then
            Set GetWB = wb
            MsgBox ("Found it")
            Exit Function
        End If
    Next wb
    MsgBox ("failed to find worksheet")
End Function

我知道我使用了一些非常糟糕的技术并为此道歉。请问有谁可以帮忙,谢谢。

杀戮的

您可以使用将宏一分为二Application.OnTime- 这将让您完成宏(以便 CSV 文件可以打开),然后安排一个新的宏在几秒钟后启动:

    'This is the end of CommandButton1_Click
    Application.Wait (Now + TimeValue("0:00:03"))
    SendKeys "%(o)"
     Dim wb As Workbook
     DoEvents

    Application.OnTime Now()+TimeSerial(0,0,15), "ContinueDownloadMacro"
    'In 15 seconds the "ContinueDownloadMacro" Sub will start
End Sub

Public Sub ContinueDownloadMacro()
    Dim wb As Workbook, ws As Worksheet

    Set wb = GetWB
    Set ws = wb.ActiveSheet

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Jar文件使用Internet Explorer打开

在Internet Explorer中直接打开下载文件时出现文件名问题

从现有(打开)的 Internet Explorer 页面运行我的 VBA 代码

打开时Internet Explorer崩溃

使用VBA从Internet Explorer窗口自动保存PDF文件

使用Excel VBA打开.csv文件

JNLP Extension无法在Internet Explorer中打开

使用VBA更改Internet Explorer编码

Internet Explorer无法打开pdf字符串文件

在新标签页中使用Java在Internet Explorer中打开HTM文件

使用Visual Basic打开Internet Explorer并调整ie窗口的大小

Internet Explorer在哪里“保存”仅“打开”的下载文件?

如何从批处理文件打开和关闭Internet Explorer?

Internet Explorer是否显示乱码以保存/打开文件?

强制在Internet Explorer中下载XML文件的打开按钮

Excel vba 使用相同的 explorer.exe 实例打开文件夹

使用Internet Explorer检测文件下载

当按钮没有关联的“名称”时,请使用Excel VBA在Internet Explorer中单击按钮

Internet Explorer 11的Javascript控制台无法打开

尝试通过 geb 启动 Internet Explorer 时,会打开 Firefox

使用Internet Explorer打开JasperReports Server / Tomcat的文件内容资源(Excel)将内联显示二进制数据

如何使用VBA在Internet Explorer中单击按钮

使用 vba 在 Internet Explorer 中单击链接文本

使用Excel VBA自动在Internet Explorer中填写表单

如何使用Access VBA在Internet Explorer中定位特定元素

VBA:从现有打开的 Internet Explorer 选项卡复制数据/文本

使用Angular项目时,只要打开开发人员工具,Internet Explorer 11总是崩溃

无法使用 PowerShell 隐藏 Internet Explorer 窗口

vba Internet Explorer 删除对象