请求帮助获取excel中的数据
我跟踪某些股票,我想知道他们的分析师价格目标是什么。我经常使用两个不同的网站:finviz和marketwatch。因此,如果我想知道股票AAPL的平均分析师价格,我会键入: 市场观察- 芬维兹- 正如您可能期望的那样,搜索查询保持不变,但这里只有股票代码AAPL发生了变化 我想做的是想办法让excel自动/在后台定期更新我跟踪的股票在这些页面上列出的目标价格。比如:请求帮助获取excel中的数据,excel,vba,Excel,Vba,我跟踪某些股票,我想知道他们的分析师价格目标是什么。我经常使用两个不同的网站:finviz和marketwatch。因此,如果我想知道股票AAPL的平均分析师价格,我会键入: 市场观察- 芬维兹- 正如您可能期望的那样,搜索查询保持不变,但这里只有股票代码AAPL发生了变化 我想做的是想办法让excel自动/在后台定期更新我跟踪的股票在这些页面上列出的目标价格。比如: A | B | C ticker mktw PT finviz P
A | B | C
ticker mktw PT finviz PT
AAPL XX YY
GOOG XX YY
NFLX XX YY
AMZN XX YY
最简单的部分似乎是让excel查找每个股票的网站,因为正如我上面提到的,除了股票代码外,股票代码保持静态。困难的部分是如何让excel在我要寻找的分析师价格目标页面上查找和提取数据
作为一个起点,我认为可以使用下面的方法来提取数据;但是我不知道如何解析最终结果。我还怀疑下面的方法是否有效,它似乎真的很密集,我想还有更精简的措施可用
Option Explicit
Sub get_data()
Dim result As String
Dim myURL As String
Dim winHttpReq As Object
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
myURL = "http://custom.gtm.idmanagedsolutions.com/custom/ibg/html-analyst.asp?symb=aapl"
winHttpReq.Open "GET", myURL, False
winHttpReq.Send
result = winHttpReq.responseText
Application.ScreenUpdating = True
Range("Sheet1!A1").Value = result
End Sub
有没有一种快速而肮脏的方法可以在excel中实现这一点?感谢您的帮助。以下代码将marketwatch和finviz的平均目标价格放在表1的A1和A2单元格中。你可以把它放在一个循环中,捕捉你所有股票的数据
Sub get_data()
Dim result As String
Dim myURL As String
For x = 1 To 2
myURL = Choose(x, "http://custom.gtm.idmanagedsolutions.com/custom/ibg/html-analyst.asp?symb=aapl", "http://elite.finviz.com/quote.ashx?t=aapl&ty=c&ta=0&p=i15")
Set html_doc = CreateObject("htmlfile")
Set xml_obj = CreateObject("MSXML2.XMLHTTP")
xml_obj.Open "GET", myURL, False
xml_obj.send
html_doc.body.innerhtml = xml_obj.responseText
Set xml_obj = Nothing
If x = 1 Then
Set Results = html_doc.getElementsByTagName("td")
For Each itm In Results
If itm.className = "mwSmall" And InStr(1, itm.innerhtml, "Average Target Price:", vbTextCompare) > 0 Then
mktw_pt = Trim(itm.nextSibling.innertext)
Exit For
End If
Next itm
Else
Set Results = html_doc.getElementsByTagName("td")
For Each itm In Results
If itm.className = "snapshot-td2-cp" And InStr(1, itm.outerhtml, "Target Price", vbTextCompare) > 0 Then
finviz_pt = itm.nextSibling.innertext
Exit For
End If
Next itm
End If
Next x
Range("Sheet1!A1").Value = mktw_pt
Range("Sheet1!A2").Value = finviz_pt
End Sub
谢谢你的帮助。不幸的是,当我尝试运行代码时,我得到了以下错误:运行时错误“-2147024891 80070005”:访问被拒绝。当我点击debug时,代码会突出显示xml_obj.send,在谷歌上快速搜索,这似乎是一个权限问题。我最近重新格式化了我的计算机,我遇到了很多问题,最终都与不正确的权限有关。我将尝试在我的工作计算机上运行此代码,并让您知道结果如何。再次感谢。请看这是否有帮助,IE工具Internet选项安全Internet自定义级别杂项设置跨域访问数据源以防止拒绝访问错误。Ron,我终于有机会重新格式化我的计算机,以修复我的权限问题以及您的代码和IE修复。。。工作起来非常有魅力。非常感谢。顺便说一句,我根本不是一个编码员,所以我真的不知道如何通过多个代码器对循环进行编码。假设我有一个单元格,在C1单元格中有20-40个股票代码,那么这项工作是否会进行下去?Dim ticker as string Dim MyTicker as range mytickers=worksheet.cells.c1.mytickers中每个ticker的值[您的代码]结束如果这样做是正确的方法吗?是的,这样的循环应该可以工作。如果我的回答有帮助,请将其标记为已接受,谢谢。