[Excel VBA & SharePoint] SharePoint Listen mit Excel & VBA updaten

Gepostet am: Mar 26, 2013 2:16:10 PM

Mit Excel selbst ist es nicht mehr möglich SharePoint Listen bidirektional zu synchronisieren. Es gibt zwar von Microsoft ein Add-in (hier) mit dem man dies erreichen kann, dies erfordert jedoch, dass die Excel Tabelle die Ausgangsbasis darstellt und initial von dieser Excel-Tabelle eine SharePoint Liste erstellt wird. (siehe Video)

Es ist aber nicht möglich von einer Excel Tabelle einzelne Zellen zu synchronisieren. Um das zu erreichen kann man sich in Excel der sogenannten SharePoint Web Services bedienen.

Vorbereitung: Um den nachfolgenden Quellcode verwenden zu können, bedarf es zuvor eines Verweises.

Quellcode (Funktion)

updateSharePointList

Public Function updateSharePointList(listURL As String, list As String, iID As Integer, iFieldName2Update As String, newFieldValue As Variant) As Boolean

Dim xmlhtp As New MSXML2.XMLHTTP

Dim XMLDOC As New DOMDocument

Dim xmlstr As String

xmlstr = "<?xml version=""1.0"" encoding=""utf-8""?>"

xmlstr = xmlstr & "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">"

xmlstr = xmlstr & "<soap12:Body>"

xmlstr = xmlstr & "<UpdateListItems xmlns=""http://schemas.microsoft.com/sharepoint/soap/"">"

xmlstr = xmlstr & "<listName>" & list & "</listName>"

xmlstr = xmlstr & "<updates>"

xmlstr = xmlstr & "<Batch OnError='continue' ListVersion='1'>"

xmlstr = xmlstr & "<Method ID='1' Cmd='Update'>"

xmlstr = xmlstr & "<Field Name='ID'>" & iID & "</Field>"

xmlstr = xmlstr & "<Field Name='" & iFieldName2Update & "'>" & newFieldValue & "</Field>"

xmlstr = xmlstr & "</Method>"

xmlstr = xmlstr & "</Batch>"

xmlstr = xmlstr & "</updates>"

xmlstr = xmlstr & "</UpdateListItems>"

xmlstr = xmlstr & "</soap12:Body>"

xmlstr = xmlstr & "</soap12:Envelope>"

With xmlhtp

    .Open "POST", listURL, False

    .setRequestHeader "Host", "wss"

    .setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"

    .send xmlstr

    XMLDOC.LoadXML .responseText

    If InStr(XMLDOC.XML, "<ErrorCode>0x00000000</ErrorCode>") > 0 Then

        updateSharePointList = True

    Else

        updateSharePointList = False

    End If

End With

End Function

Anwendung:

Public Function UpdateStatus(iID As Integer) As Boolean

    If updateSharePointList("URL/_vti_bin/lists.asmx", "LISTNAME", iID, "COLUMNAME", "VALUE") = True Then

        UpdateStatus = True

    Else

        UpdateStatus = False

    End If

End Function