2017-03-07 74 views
0

VBAを使用してExcelからSharepoint 2013リストにデータを追加しようとしましたが、成功しませんでした。私は、インターネット上のすべての例をテンプレートとして使用しています。VBAでExcelからSharepoint 2013リストにデータを追加

私はXMLとSOAPの使用に慣れていないので、私は後方に働き、リストに最初に項目を追加しようと決めました。私はシートからデータを取得することに問題はありません。私はサブにすべてのパラメータを渡さない、私は値を割り当てます。

エラーはありません。しかし、リストにもデータは書き込まれません。私は200というステータスも取得します。これは単に「OK」を意味します。 私はリスト名やURLからいくつかの文字を取り出してエラーを出すことも試みましたが、まだステータスは200です。

Msxml2.XMLHTTPの代わりにMsxml2.ServerXMLHTTPを使用すると401の状態です。私はエラーを強制することができますので、これを動作させるために修正する必要があることがわかりますか?ここで

は(うまくいけば、私はすべての機密情報を削除)私が働いているものです:

Sub Add_Item() 

' Hard coding the parameters to start so just testing the output to SharePoint 
Dim ListName As String 
Dim SharepointUrl As String 
Dim Branch_Cost_Center As String 
Dim Field1NameVar 
ListName = "Nightly Device Tracking Excel XML Test" 
SharepointUrl = "https://{myurl}" 
Field1NameVar = "Branch Cost Center" 
Branch_Cost_Center = "919191" 
' Remove the above when passing parameters 

Dim objXMLHTTP As MSXML2.XMLHTTP 

Dim strListNameOrGuid As String 
Dim strBatchXml As String 
Dim strSoapBody As String 

Set objXMLHTTP = New MSXML2.XMLHTTP 

strListNameOrGuid = ListName 


'Add New Item' 
strBatchXml = "<Batch OnError='Continue'><Method ID='3' Cmd='New'><Field Name='ID'>New</Field><Field Name=" + Field1NameVar + ">" + Branch_Cost_Center + "</Field></Method></Batch>" 


objXMLHTTP.Open "POST", SharepointUrl + "_vti_bin/Lists.asmx", False 
objXMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8""" 
objXMLHTTP.setRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems" 

strSoapBody = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " _ 
& "xmlns:xsd='http://www.w3.org/2001/XMLSchema' " _ 
& "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><UpdateListItems " _ 
& "xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>" & strListNameOrGuid _ 
& "</listName><updates>" & strBatchXml & "</updates></UpdateListItems></soap:Body></soap:Envelope>" 

'for debugging 
Debug.Print strSoapBody 

objXMLHTTP.send strSoapBody 

If objXMLHTTP.Status = 200 Then 
' Do something with response 
End If 

Set objXMLHTTP = Nothing 

End Sub 

私は結果に違いはありませんとフィールドの内部名とGUIDの代わりに、リスト名を使用して試してみました。

objXMLHTTPにwatch変数を設定しましたが、何を探すべきか分かりません。返される情報はたくさんあります。

答えて

0

あなたのフィールド名はそれらの周りの単一引用符を持っている必要があります:

Field1NameVar = "'Branch Cost Center'" 
関連する問題