27

在 excel 2007 的 VBA 模块中,是否可以调用 Web 服务?如果是这样,任何代码片段?我将如何添加网络参考?

4

5 回答 5

25

是的你可以!

我参与了一个这样做的项目(见评论)。不幸的是,没有来自那个的代码示例,但谷歌搜索显示了这些:

如何使用 Excel 和 VBA 集成来自多个 Web 服务的数据

一步一步:通过 VBA(Excel 或 Word)使用 Web 服务

VBA:使用 Soap Web 服务

于 2009-01-23T22:53:50.937 回答
6

以下是 MS 的概述:

在 Excel 2007 中使用 Web 服务

于 2010-01-29T21:05:04.643 回答
3

有关更新的答案,请参阅此 SO 问题:

在 excel 2010 中使用 VBA 代码调用 Web 服务

两个线程都应该合并。

于 2012-06-25T09:39:24.973 回答
1

在 Microsoft Excel Office 2007 中尝试安装“Web 服务参考工具”插件。并使用 WSDL 并添加 Web 服务。并在模块中使用以下代码从 Web 服务中获取必要的数据。

Sub Demo()
    Dim XDoc As MSXML2.DOMDocument
    Dim xEmpDetails As MSXML2.IXMLDOMNode
    Dim xParent As MSXML2.IXMLDOMNode
    Dim xChild As MSXML2.IXMLDOMNode
    Dim query As String
    Dim Col, Row As Integer
    Dim objWS As New clsws_GlobalWeather

    Set XDoc = New MSXML2.DOMDocument
    XDoc.async = False
    XDoc.validateOnParse = False
    query = objWS.wsm_GetCitiesByCountry("india")

    If Not XDoc.LoadXML(query) Then  'strXML is the string with XML'
        Err.Raise XDoc.parseError.ErrorCode, , XDoc.parseError.reason
    End If
    XDoc.LoadXML (query)

    Set xEmpDetails = XDoc.DocumentElement
    Set xParent = xEmpDetails.FirstChild
    Worksheets("Sheet3").Cells(1, 1).Value = "Country"
    Worksheets("Sheet3").Cells(1, 1).Interior.Color = RGB(65, 105, 225)
    Worksheets("Sheet3").Cells(1, 2).Value = "City"
    Worksheets("Sheet3").Cells(1, 2).Interior.Color = RGB(65, 105, 225)
    Row = 2
    Col = 1
    For Each xParent In xEmpDetails.ChildNodes
        For Each xChild In xParent.ChildNodes
            Worksheets("Sheet3").Cells(Row, Col).Value = xChild.Text
            Col = Col + 1
        Next xChild
        Row = Row + 1
        Col = 1
    Next xParent
End Sub
于 2015-09-14T12:42:38.373 回答
0

Excel 2013 从 Web 服务读取数据并 bash 直到您可以从中获得所需的内容(假设 JSON 将始终采用相同的格式)。

这段代码应该可以在不需要任何插件的情况下工作。

不过,您将需要来自货币转换器网站的免费 API 密钥。

我用它将美元到英镑的值加载到我工作表上的一个单元格中。

Option Explicit

Sub Test_LateBinding()

    Dim objRequest As Object
    Dim strUrl As String
    Dim blnAsync As Boolean
    Dim strResponse As String

    Set objRequest = CreateObject("MSXML2.XMLHTTP")
    strUrl = "https://free.currconv.com/api/v7/convert?q=USD_GBP&compact=ultra&apiKey=[MY_API_KEY]"
    blnAsync = True

    With objRequest
        .Open "GET", strUrl, blnAsync
        .SetRequestHeader "Content-Type", "application/json"
        .Send
        While objRequest.readyState <> 4
            DoEvents
        Wend
        strResponse = .responsetext
    End With
    
    Dim responseArray() As String
    responseArray = Split(strResponse, ":", -1)
    
    Dim value As String
    value = responseArray(1)
    
    Dim valueArray() As String
    valueArray = Split(value, "}", -1)
    
    Dim finalValue As String
    finalValue = valueArray(0)
    
    Sheet2.Cells(22, "C") = finalValue
End Sub
于 2021-07-30T05:21:01.227 回答