【问题标题】:Copy data from Web to excel using VBA使用 VBA 将数据从 Web 复制到 Excel
【发布时间】:2018-07-30 12:46:22
【问题描述】:

我有一个网页,需要我的代码从页面复制整个数据并将其复制到 excel 工作表中,目前还没有。我的 Excel 表格将完全空白。我认为^a 功能不适用于 IE 选择数据然后复制它。

非常感谢任何帮助。下面是我正在使用的代码。

Sub Webdata()

    Dim assetname As String, country As String, area As String, region As String, pth As String, folname As Variant, assetname1 As String

    Website = "http://website.com/"
    Set myIE = CreateObject("InternetExplorer.Application")
    myIE.Navigate source
    myIE.Visible = True
    Application.Wait Now + TimeSerial(0, 0, 10)
    SendKeys "^a"
    Application.Wait Now + TimeSerial(0, 0, 2)
    SendKeys "^c"
    Application.Wait Now + TimeSerial(0, 0, 2)
    Sheets.Add
    ActiveSheet.Name = "Webdata"
    ActiveSheet.Paste
    Application.Wait Now + TimeSerial(0, 0, 2)

    Range("A1").Select
    Cells.Find(What:="Api Number", After:=ActiveCell, LookIn:= _
               xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
               xlNext, MatchCase:=False, SearchFormat:=False).Activate

    ActiveCell.Offset(1, 0).Select
    Selection.Copy
    Sheets("Sheet1").Activate
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                           :=False, Transpose:=False
    Application.CutCopyMode = False
    myIE.Quit

    Set myIE = Nothing
    Err.Clear
    Sheets("Webdata").Select
    ActiveSheet.Delete

End Sub

【问题讨论】:

  • 是的,有办法。到目前为止,您研究了什么以及您尝试了什么?在你的问题中展示你已经做了什么,并告诉我们你的困难到底是什么,你在哪里卡住或出错了。 Stack Overflow 上有几个问题正好回答了这类问题。
  • 非常感谢您的回复。我对此有以下查询,但不知何故这对我不起作用。
  • 请通过editing 将属于您问题的所有内容添加到上面的原始问题中。不要用 cmets 来问什么。还要解释 究竟是什么 不起作用。因为“不工作”并没有告诉我们任何有关您的问题的信息。
  • 正如我所说:Edit 你的问题并添加到那里。将其格式化为代码块(4 个空格缩进,或使用 ctrl + K 缩进)。然后用代码删除 cmets。
  • @Nishant 你确定 URL 中的那些 ID 可以安全地发布给全世界吗?

标签: html excel vba web-scraping


【解决方案1】:

那张表一团糟,所以与其花时间完善如何以我通常的方式将表格写到工作表上,即在行内循环表格行和表格单元格,我会坚持你复制表格的想法但使用带有.SetText 的剪贴板,而不是SendKeys。 感兴趣的表格位于嵌套框架内,因此您必须先协商这些框架。

Set hTable = .frames(2).document.getElementsByTagName("table")(0)

代码:

Option Explicit
Public Sub GetInfo()
    Dim IE As New InternetExplorer, html As HTMLDocument, hTable As HTMLTable, clipboard As Object
    Application.ScreenUpdating = False
    With IE
        .Visible = True
        .navigate "http://pipeline.wyo.gov/Wellapi.cfm?oops=IDxxxxx&nAPINO=xxxxxx" '<==Input your personal URL here 
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set html = .document
        With html
            Set hTable = .frames(2).document.getElementsByTagName("table")(0)
            Set clipboard = New MSForms.DataObject
            clipboard.SetText hTable.outerHTML
            clipboard.PutInClipboard
            ActiveSheet.Cells(1, 1).PasteSpecial
        End With
        .Quit
    End With
    Application.ScreenUpdating = True
End Sub

参考资料:

VBE> 工具 > 参考:

  1. Microsoft Forms 2.0 对象库
  2. HTML 对象库
  3. Internet Explorer 控件

【讨论】:

  • 非常感谢 QHarr 让我离开,但是我收到编译错误 - 未定义用户定义的类型。请原谅我对 VBA 的了解非常有限。
  • 现在我收到 Set clipboard = New MSForms.DataObject 的编译错误
  • 错误是编译错误“未定义用户定义的类型”并且新的 MSForms.DataObject 突出显示
  • 哦,是的,现在可以使用了....非常感谢 QHarr...真的很有帮助...再次感谢您的努力。
  • 哦,是的......非常感谢一次又一次......现在效果很好。你太棒了。
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2023-02-08
相关资源
最近更新 更多