2017-03-05 4 views
2

일반 정보 : Excel에서 SharePoint 목록을 업데이트 (추가/편집)해야합니다. 내가 ListObject으로 할 수 있었지만 이것이 우리가 이끌고있는 방향이 아닙니다.Excel-VBA (MSXML2.XMLHTTP 개체)를 사용하여 SharePoint 목록 업데이트

Google의 모든 가능성을 모두 읽은 후 MSXML2.XMLHTTP 개체를 사용하여 SharePoint 목록을 업데이트하는 아이디어와 함께 나왔습니다.

현재 문제 : 내 코드가 끝까지 실행되지 않아 objXMLHTTP.Status = 200이되지만 SharePoint 목록이 업데이트되지 않습니다.

코드 여기

Option Explicit 

Const SharepointUrl As String = "http://share.corning.com/sites/ipp/PMOSandbox/" 
Const ListName As String = "{60CE6622-D25B-447A-BFBF-8F3DD5B9FCF0}" 
Const VIEWNAME As String = "{91ADBAE5-479F-4C80-A5FF-8EDA7A233B82}" 

Sub Add_Item() 

Dim objXMLHTTP As MSXML2.XMLHTTP  
Dim strListNameOrGuid As String 
Dim strBatchXml As String 
Dim strSoapBody As String  
Dim ValueVar As String, FieldNameVar As String 

Set objXMLHTTP = New MSXML2.XMLHTTP 

FieldNameVar = "IPP #" 
ValueVar = "Shai" 

'Add New Item'  
strBatchXml = "<Batch OnError='Continue'><Method ID='1' Cmd='New'><Field Name='" + FieldNameVar + "'>1004</Field>" + _ 
      "<Field Name='Title'>Uploaded from VBA</Field>" + _ 
      "<Field Name='Next KD Status'>" + ValueVar + "</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>" & ListName _ 
& "</listName><updates>" & strBatchXml & "</updates></UpdateListItems></soap:Body></soap:Envelope>" 

objXMLHTTP.send strSoapBody 

Do 
    ' wait for response 
Loop Until objXMLHTTP.Status = 200 

Set objXMLHTTP = Nothing 

MsgBox "Finished Running !" 

End Sub 
+0

아마도 ADO를 사용하는 것이 더 나은 옵션일까요? SQL 문으로 테이블을 업데이트 할 수 있습니다. –

+0

@RyanWildry 나는 제안에 대해 개방적이다. 어떻게 구현 하는가? –

+0

ADO와 연결을 참조하십시오. https://www.connectionstrings.com/sharepoint/ Microsoft ACE OLEDB 12.0 부분에서 연결 문자열로 테이블을 업데이트하십시오. 이미 GUID 목록이있는 것 같습니다. 연결을 설정하려면이 목록이 필요합니다. –

답변

1

는 ADO이 작업을 수행하는 방법에 대한 기본 개요입니다.

Option Explicit 

Public Sub Update() 
On Error GoTo ErrHand 

    'Create the connection object with ADO 
    Dim conn  As Object: Set conn = CreateObject("ADODB.Connection") 

    'Write your update statement 
    Dim sql   As String 
    sql = "Update MyTable set Field1= 'A', Field2='B' Where MyID=1234" 

    'Open the connection and submit the update 
    'In my experience, credentials should be requested by the server - 
    'by way of a windows pop-up 
    With conn 
     .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;" & _ 
          "DATABASE=MySharePointURL;" & _ 
          "LIST={MyListGUID};" 
     .Open 
     .Execute sql 
    End With 

CleanExit: 
    If conn.State = 1 Then conn.Close: Set conn = Nothing 
    Exit Sub 

ErrHand: 
    Debug.Print Err.Number, Err.Description 
    GoTo CleanExit 
End Sub 
+0

내일 직장에서 시험하겠습니다. 이 경우 "sql"을 사용하여 2 개의 필드를 업데이트합니다 ("LA"에서 "GA"로의 "다음 KD 상태"값을 말하고, "GR"에서 "상태"로) '~'''YL''), 필드''IPP # ''은 1002와 같다. –

+0

새로운 SO SQL 질문과 같다. 아마도 Access/Excel에서 환경을 에뮬레이트하여 수행해야 할 작업을 확인하십시오. where 절의 매개 변수가있는 update 문과 비슷합니다. –

+0

고맙습니다. 작동합니다. 이제 업데이트 용 SQL 구문을 고수하면서 제 SQL Server를 사용하고 있습니까? 내 새 게시물에 대한 링크를 보내 주시겠습니까? –