在网站上搜索条件是更改不同的单元格

时间:2014-04-03 14:51:43

标签: html excel vba excel-vba stock

我目前正在尝试在VBA中编写代码,这段代码的目的通常是:

  • 输入到单元格" A"在一个确定的范围内。
  • 离开这个特定的单元格(在范围内)我想要在输入单元格旁边打印网站搜索的不同信息" A"。

更具体地说,我想编写一个代码,我可以在列中键入特定的股票代码(即" IBM"),当我这样做时,程序开始,进入财务.yahoo.com,收集有关此特定股票的不同信息(即"国际商业机器"),并将此信息打印到右边"我首先输入股票代码的单元格。

目标是能够输入20-30个股票代码,并使其检索每个股票代码的信息并将其打印到这些股票代码的右侧。

我已经想出如何在特定单元格中键入一个自动收报机,并使其从网站上检索所需的数据,然后将其打印到特定的单元格中,然后将其打印到右侧"输入单元格。

我现在的挑战是,能够在第一个输入单元下方的大范围单元格中执行此操作。

截至目前我的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Range("Sheet1!$A$2").Row And _
Target.Column = Range("Sheet1!$A$2").Column Then
 Dim IE As New InternetExplorer
  IE.Visible = False
 IE.navigate "http://finance.yahoo.com/q;_ylt=AiMiBWm16z_q5Ai0SlNb3jaiuYdG;_ylu=X3oDMTBxdGVyNzJxBHNlYwNVSCAzIERlc2t0b3AgU2VhcmNoIDEx;_ylg=X3oDMTBsdWsyY2FpBGxhbmcDZW4tVVMEcHQDMgR0ZXN0Aw--;_ylv=3?s=" & Range("Sheet1!$A$2").Value 'This types in the value from my input-cell into the website, so i get directed to the webpage for this particular company.
  Do
   DoEvents
  Loop Until IE.readyState = READYSTATE_COMPLETE
  Dim Doc As HTMLDocument
  Set Doc = IE.document
  Dim Name_001 As String 'Info-cell with name of the company
  Dim Ticker_001 As String 'Info-cell with current price of the company
   Name_001 = Trim(Doc.getElementsByClassName("title")(0).innerText)
   Ticker_001 = Trim(Doc.getElementsByClassName("yfi_rt_quote_summary_rt_top sigfig_promo_1")(0).innerText)
 IE.Quit
 Dim Nam_001 As Variant
 Dim Tic_001 As Variant
  Nam_001 = Split(Name_001, "(")
  Tic_001 = Split(Ticker_001, " ")
  Range("Sheet1!$B$2").Value = Nam_001(0)
  Range("Sheet1!$C$2").Value = Tic_001
End If

End Sub

  • " Sheet1!$ A $ 2":输入单元格
  • " Sheet1!$ B $ 2":股票代码名称的第一个输出单元格。
  • " Sheet1!$ C $ 2":股票代码当前价格的第二个输出单元格。

现在我的代码只适用于一行,我希望它适用于当前输入单元格下的所有行:

我希望我的问题很清楚,你可以帮助我解决我的问题(我不允许发布任何图片,所以我不能告诉你我的工作簿,但是我在列中有代码" A&# 34;,列中的名称" B"以及列中的价格" C")。

提前致谢 - Juhlers。

1 个答案:

答案 0 :(得分:0)

我修改了你的代码:(1)改变了工作表名称; (2)删除锚定行($ 2)并替换为'Target.Row'; (3)添加错误陷阱 - 有时会出错; (4)将光标更改为“忙”,因为它需要几秒钟。请尝试以下方法:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim IE          As New InternetExplorer
Dim Doc         As HTMLDocument
Dim Name_001    As String 'Info-cell with name of the company
Dim Ticker_001  As String 'Info-cell with current price of the company
Dim Nam_001     As Variant
Dim Tic_001     As Variant

    On Error GoTo Error_Trap
    If Target.column <> 1 Then
        Exit Sub
    End If
        Application.Cursor = xlWait
        IE.Visible = False
        IE.navigate "http://finance.yahoo.com/q;_ylt=AiMiBWm16z_q5Ai0SlNb3jaiuYdG;_ylu=X3oDMTBxdGVyNzJxBHNlYwNVSCAzIERlc2t0b3AgU2VhcmNoIDEx;_ylg=X3oDMTBsdWsyY2FpBGxhbmcDZW4tVVMEcHQDMgR0ZXN0Aw--;_ylv=3?s=" & Range("Stocks!$A" & Target.row).value 'This types in the value from my input-cell into the website, so i get directed to the webpage for this particular company.
        Do
            DoEvents
        Loop Until IE.readyState = READYSTATE_COMPLETE
        Set Doc = IE.document
        Name_001 = Trim(Doc.getElementsByClassName("title")(0).innerText)
        Ticker_001 = Trim(Doc.getElementsByClassName("yfi_rt_quote_summary_rt_top sigfig_promo_1")(0).innerText)
        IE.Quit
        Nam_001 = Split(Name_001, "(")
        Tic_001 = Split(Ticker_001, " ")
        Range("Stocks!$B" & Target.row).value = Nam_001(0)
        Range("Stocks!$C" & Target.row).value = Tic_001
        Application.Cursor = xlNormal
    Exit Sub
Error_Trap:
    Application.Cursor = xlNormal
    MsgBox "Error: " & Err.Number & vbTab & Err.Description
    Exit Sub
End Sub