繁体   English   中英

Mac OSX 上的 WinHttpRequest Excel 2011 VBA

[英]WinHttpRequest on Mac OSX Excel 2011 VBA

Mac 版本 Excel 2011 的“参考”中没有 WinHttopRequest。我尝试了以下我在其他帖子中看到的方法:

Set HTTP = CreateObject("MSXML2.ServerXMLHTTP")

这给了我一个“429”运行时错误:ActiveX controller 无法创建 object。

有没有办法在 Mac Excel 上使用 WinHttpRequest 或类似的东西? 我也没有查询表的运气,并且想避免这种解决方案。 我认为应该有一个简单的 http GET 解决方案来解决这个问题。 只是找不到 Mac Excel。

我正在尝试从 Yahoo Finance api url 获取数据:

Dim URL As String: URL = "http://finance.yahoo.com/d/quotes.csv?s=" & Symbols & "&f=snl1hg"
Dim HTTP As New WinHttpRequest
HTTP.Open "GET", URL, False
HTTP.Send

我知道这适用于 windows,但我使用的是 Mac。 请指教。 谢谢!

您可以使用 QueryTables 代替 HTTP Get 调用 (WinHttopRequest),这显然不受 Mac Excel 2011 支持。下面的代码对我有用 - 在列中输入代码,从 A2 开始,输入 yahoo 财务标签(即 a, b, r, n) 在从 B1 开始的行中。

您可以组装 URL 以调用 csv 的 YF,然后使用 QueryTable 进行调用并将结果粘贴到工作表中。

在 Mac Excel 2011 上工作的代码:

Sub Yahoo_Finance_API_Call_MacExcel2011()
    Dim head As Range
    Set head = Range("A1")

    Dim wb As Workbook 'In the event that you'll use different workbooks
    Dim src As Worksheet 'In the event that you'll use different a source worksheet
    Dim tgt As Worksheet 'In the event that you'll use different a target worksheet

    Set wb = ThisWorkbook
    Set src = wb.Sheets("Sheet1")
    Set tgt = wb.Sheets("Sheet1")

    'Assemble Symbols for API Call
    Set rng = Range(head.Offset(1, 0), head.Offset(1, 0).End(xlDown))
    For Each cell In rng ' Starting from a cell below the head cell till the last filled cell
        Symbols = Symbols & cell.Value & "+"
    Next cell
    Symbols = Left(Symbols, Len(Symbols) - 1) ' Remove the last '+'

    'Assemble Tags or API Call
    Set rng = Range(head.Offset(0, 1), head.Offset(0, 1).End(xlToRight))
    For Each cell In rng ' Starting from a cell to the right of the head cell till the last filled cell
        tags = tags & cell.Value
    Next cell

    'Build URL
    URL = "TEXT;http://finance.yahoo.com/d/quotes.csv?s=" 'Use TEXT to collect API data below
    URL = URL & Symbols & "&f=" & tags

        'Range("A1").Value = URL 'This will output the assembled URL in a1 for QA if need be

    'Call API
    With tgt.QueryTables.Add(Connection:= _
            URL, _
            Destination:=Range(head.Offset(1, 1), head.Offset(1, 1).End(xlDown)))

        .RefreshStyle = xlOverwriteCells
        .TextFileParseType = xlDelimited
        .TextFileCommaDelimiter = True
        .BackgroundQuery = True
        .TextFileCommaDelimiter = True
        .TablesOnlyFromHTML = True
        .Refresh BackgroundQuery:=False
        .TextFilePromptOnRefresh = False
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .SaveData = False
    End With
End Sub

我不相信 Mac 有任何等同于 MSXML.ServerXMLHTTP 的东西。 另一个 stackoverflow 线程的建议是使用 QueryTables。 总之,该线程建议:

With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2"))
    .PostText = "origin_airport=MSN&destination_airport=ORD"
    .RefreshStyle = xlOverwriteCells
    .SaveData = True
    .Refresh
End With

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM