在网站上search有条件改变不同的单元格

我目前正在尝试在VBA中编写代码,这个代码的目的一般是:

  • 在定义的范围内input单元格“A”。
  • 从这个特定的单元格(在范围内),我想要从网站search的不同信息打印在input单元格“A”旁边。

更具体地说,我想写一个代码,在那里我可以在列中input特定的股票代码(即“IBM”),当我这样做时,程序开始,到finance.yahoo.com,收集不同的信息关于这个特定的股票(即“国际商业机器”),并打印这个信息“右边”的单元格,我首先input股票代码。

我们的目标是能够input20-30个股票代号,并且可以检索每个代码的信息并将其打印在股票代码的右侧。

我已经想出了如何在特定的单元格中input一个代码,并从网站中获取所需的数据,然后将其打印到input单元右侧的特定单元格中。

我现在面临的挑战是能够为第一个input单元下面的大量单元做到这一点。

我的代码截至目前:

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 

结束小组

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

现在,我的代码只能用于一行,我希望它能够处理当前input单元格下的所有行:

我希望我的问题是清楚的,你可以帮我解决我的问题(我不允许张贴任何图片,所以我不能给你看我的工作簿,但是我在列“A”中有代号,在列“B “和”C“栏中的价格)。

在此先感谢 – Juhlers。

我修改了你的代码:(1)改变了表名; (2)删除锚定行($ 2)并replace为“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