[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