2013-08-16 14 views
1

我试图使用Excel 2010中的宏更新Sharepoint列表。到目前为止,我没有更新常规文本或数字字段的问题,但是当它出现查找字段时,它会返回错误0x80002005。我猜你不能模拟使用列表中的现有文字,但不能在我的生活中找到适当语法的任何文档。在VBA for Excel中使用SOAP更新Sharepoint列表中的查找字段

这是我的VBA代码。

Set ObjHTTP = New MSXML2.XMLHTTP 
sURL = "http://SITE_NAME_HERE_vti_bin/lists.asmx?op=UpdateListItems" 

sEnv = "<?xml version=""1.0"" encoding=""utf-8""?>" 
sEnv = sEnv & " <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " 
sEnv = sEnv & " xmlns:xsd=""http://www.w3.org/2001/XMLSchema""" 
sEnv = sEnv & " xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" 
sEnv = sEnv & " <soap:Body>" 
sEnv = sEnv & " <UpdateListItems xmlns=""http://schemas.microsoft.com/sharepoint/soap/"">" 
sEnv = sEnv & " <listName>MYLISTNAME</listName>" 
sEnv = sEnv & " <updates>" 
sEnv = sEnv & " <Batch OnError=""Continue"" ListVersion=""1"">" 
sEnv = sEnv & " <Method ID=""1"" Cmd=""New"">\" 


sEnv = sEnv & " <Field Name=""MYLOOKUPFIELD"">" 
sEnv = sEnv & "" 
sEnv = sEnv & " </Field>" 



sEnv = sEnv & " </Method>" 
sEnv = sEnv & " </Batch>" 
sEnv = sEnv & " </updates>" 
sEnv = sEnv & " </UpdateListItems>" 
sEnv = sEnv & " </soap:Body>" 
sEnv = sEnv & " </soap:Envelope>" 

MsgBox (sEnv) 

ObjHTTP.Open "Post", sURL, True 
ObjHTTP.setRequestHeader "Content-Type", "text/xml" 
ObjHTTP.setRequestHeader "dataType", " xml" 
ObjHTTP.setRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems" 

ObjHTTP.send (sEnv) 

Application.Wait (Now + TimeValue("0:00:10")) 
MsgBox (ObjHTTP.responseText) 

Set ObjHTTP = Nothing 
Set xmlDoc = Nothing 

回答

3

尝试运行GetListItems,你会看到一个查找在ID in Source List;#Value in Source List编码格式存储其值。例如,ows_MyLookup="13;#MyValue"。致电UpdateListItems时,您需要以此格式传递一个值。

+0

谢谢。按照您指定的格式传递ID和名称就可以实现。但是,在不运行任何SOAP协议的情况下获取ID的更简单方法是简单地将鼠标悬停在sharepoint中的项目上,并且ID应该出现在大多数浏览器左下角的输出结尾 – Deengus

相关问题