vba - 使用VBA在excel中导入网页数据

标签 vba excel

我想将 MutualFundsPortfolioValues 导入 Excel。我不知道如何从网站导入数据,我需要做的是在所选公司的 2 个不同日期内将 Web 数据导入 Excel ..

当我在 B3 和 B4 单元格中输入日期并单击命令按钮 1 时,Excel 可能会将我网页中的所有数据导入到我的 Excel 工作表“结果”

例如:

date 1: 04/03/2013 <<<< " it will be in sheets "input" cell B3
date 2 : 11/04/2013 <<<<< " it will be in sheet "input " cell B4
choosen companies <<<<<< its Range "B7: B17"

我添加了示例 Excel 工作表和网页的打印屏幕。 有什么想法吗?

我的网页网址:

http://www.spk.gov.tr/apps/MutualFundsPortfolioValues/FundsInfosFP.aspx?ctype=E&submenuheader=0

Excel示例和数据示例图片: http://uploading.com/folders/get/b491mfb6/excel-web-query

最佳答案

这是使用 IE Automation 导入数据的代码。

Input Parameters (Enter in Sheet1 as per screenshot below)
start date = B3
end date = B4
Şirketler = B5 (It allows multiples values which should appear below B5 and so on)

enter image description here

ViewSource of page 输入字段 enter image description here

代码的工作原理:

  • 代码创建 Internet Explorer 对象并导航到 site
  • 等待页面完全加载并准备就绪。 (IE.就绪状态)
  • 创建对象 html 类
  • 为工作表 1 中的输入字段输入值(txtDateBegin、txtDateEnd、lstCompany)
  • 点击提交按钮
  • 遍历表 dgFunds 的每一行并转储到 excel Sheet2

代码:

   Dim IE As Object
Sub Website()


    Dim Doc As Object, lastRow As Long, tblTR As Object
    Set IE = CreateObject("internetexplorer.application")
    IE.Visible = True

navigate:
    IE.navigate "http://www.spk.gov.tr/apps/MutualFundsPortfolioValues/FundsInfosFP.aspx?ctype=E&submenuheader=0"

    Do While IE.readystate <> 4: DoEvents: Loop

    Set Doc = CreateObject("htmlfile")
    Set Doc = IE.document

    If Doc Is Nothing Then GoTo navigate

    Set txtDtBegin = Doc.getelementbyid("txtDateBegin")
    txtDtBegin.Value = Format(Sheet1.Range("B3").Value, "dd.MM.yyyy")

    Set txtDtEnd = Doc.getelementbyid("txtDateEnd")
    txtDtEnd.Value = Format(Sheet1.Range("B4").Value, "dd.MM.yyyy")


    lastRow = Sheet1.Range("B65000").End(xlUp).row
    If lastRow < 5 Then Exit Sub

    For i = 5 To lastRow

        Set company = Doc.getelementbyid("lstCompany")
        For x = 0 To company.Options.Length - 1
            If company.Options(x).Text = Sheet1.Range("B" & i) Then
                company.selectedIndex = x

                Set btnCompanyAdd = Doc.getelementbyid("btnCompanyAdd")
                btnCompanyAdd.Click
                Set btnCompanyAdd = Nothing

                wait
                Exit For
            End If
        Next
    Next


    wait

    Set btnSubmit = Doc.getelementbyid("btnSubmit")
    btnSubmit.Click

    wait

    Set tbldgFunds = Doc.getelementbyid("dgFunds")
    Set tblTR = tbldgFunds.getelementsbytagname("tr")



    Dim row As Long, col As Long
    row = 1
    col = 1

    On Error Resume Next

    For Each r In tblTR

        If row = 1 Then
            For Each cell In r.getelementsbytagname("th")
                Sheet2.Cells(row, col) = cell.innerText
                col = col + 1
            Next
            row = row + 1
            col = 1
        Else
            For Each cell In r.getelementsbytagname("td")
                Sheet2.Cells(row, col) = cell.innerText
                col = col + 1
            Next
            row = row + 1
            col = 1
        End If
    Next

    IE.Quit
    Set IE = Nothing

    MsgBox "Done"

End Sub

Sub wait()
    Application.wait Now + TimeSerial(0, 0, 10)
    Do While IE.readystate <> 4: DoEvents: Loop
End Sub

工作表 2 中的输出表

enter image description here

HTH

关于vba - 使用VBA在excel中导入网页数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959008/

相关文章:

Excel:SUMPRODUCT 用百分比计算以小时为单位的共享工作量

excel - 如何在 Excel VBA 中将 const 定义为对象?

excel - 获取列中最常用的 10 个名称

vba - 从 VBA 中的不同模块调用子例程

vba - 避免尝试有条件地保护共享工作簿中的单元格的解决方法

excel - VBA - 从 NOW 函数中删除秒数

excel - VBA to SAP//以表格为输入参数的 RFC 功能模块

vba - VBA 中的动态运算符。我怎样才能?

vba - 最小化工作簿/工作表但保持表单打开

c# - 如何读取 NPOI 中的空单元格