2009-01-23 7 views
22

Dans un module VBA dans Excel 2007, est-il possible d'appeler un service Web? Si oui, des extraits de code? Comment ajouter la référence Web?Appelez le service Web dans Excel

+1

Je sais que c'est possible, parce que j'ai déjà travaillé sur un projet qui l'a fait. Malheureusement, je n'ai travaillé que sur la partie Service Web et j'avais trop à faire pour explorer le code Excel. Je vais essayer de savoir comment. C'est possible. – Mostlyharmless

+0

Vous pouvez trouver ceci utile: http://stackoverflow.com/questions/3521876/calling-web-service-using-vba-code-in-excel-2010 – SAL

Répondre

23

Oui, vous le pouvez!

J'ai travaillé sur un projet qui a fait cela (voir commentaire). Malheureusement, aucun échantillon de code de celui-là, mais googler révélé ces:

How you can integrate data from several Web services using Excel and VBA

STEP BY STEP: Consuming Web Services through VBA (Excel or Word)

VBA: Consume Soap Web Services

+3

Et juste au cas où quelqu'un se demande: Non, ce n'est pas t disponible sur des versions Excel relativement récentes. :( –

5

Voici un aperçu de MS:

Consuming Web Services in Excel 2007

+0

La question ne précise pas quelle version d'Excel est utilisée, cependant, VBA est obsolète en 2007 et votre méthode est correcte –

+6

@Justin Dearing: Qu'est-ce qui vous fait dire que VBA est dépréciée partout? –

1

Dans Microsoft Excel Office 2007, essayez d'installer le plug-in "Web Service Reference Tool". Et utilisez le WSDL et ajoutez les services Web. Et utilisez le code suivant dans le module pour extraire les données nécessaires du service 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 
Questions connexes