Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请求帮助获取excel中的数据_Excel_Vba - Fatal编程技术网

请求帮助获取excel中的数据

请求帮助获取excel中的数据,excel,vba,Excel,Vba,我跟踪某些股票,我想知道他们的分析师价格目标是什么。我经常使用两个不同的网站:finviz和marketwatch。因此,如果我想知道股票AAPL的平均分析师价格,我会键入: 市场观察- 芬维兹- 正如您可能期望的那样,搜索查询保持不变,但这里只有股票代码AAPL发生了变化 我想做的是想办法让excel自动/在后台定期更新我跟踪的股票在这些页面上列出的目标价格。比如: A | B | C ticker mktw PT finviz P

我跟踪某些股票,我想知道他们的分析师价格目标是什么。我经常使用两个不同的网站:finviz和marketwatch。因此,如果我想知道股票AAPL的平均分析师价格,我会键入:

市场观察-

芬维兹-

正如您可能期望的那样,搜索查询保持不变,但这里只有股票代码AAPL发生了变化

我想做的是想办法让excel自动/在后台定期更新我跟踪的股票在这些页面上列出的目标价格。比如:

   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的值[您的代码]结束如果这样做是正确的方法吗?是的,这样的循环应该可以工作。如果我的回答有帮助,请将其标记为已接受,谢谢。