I have a hunch you want to build the listobject with a good clear definition, then use the stored definition to make your query. I was not able to get it to work right, so I did my solution in straight VBA. I wanted my spreadsheet to always be authoritative and my data was well structured. I used a web service call from VBA to do my updates.
Syncing items between the list and workbook would require reading the list, comparing to the workbook, adding any new items, then comparing the workbook to the list and making an update like below.
This can absolutely be done using straight web services, but it may take some finesse to get the field names correct and updates to the process become more difficult.
Here is the code I used:
Sub UpdateListItems(cUpdates As Dictionary, ByVal ListName As String, SiteURL As String)
'Set and Instantiate our working objects
Set objHttp = CreateObject("MSXML2.XMLHTTP")
sURL = SiteURL & "/_vti_bin/lists.asmx"
Dim node_listName As IXMLDOMElement
Dim node_updates As IXMLDOMElement
Dim node_batch As IXMLDOMElement
Dim xmlUpdateShell As New DOMDocument
xmlUpdateShell.LoadXML "<x:Envelope xmlns:x=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:soa=""http://schemas.microsoft.com/sharepoint/soap/"">" & _
"<x:Header/><x:Body><soa:UpdateListItems><soa:listName>" & ListName & "</soa:listName><soa:updates><Batch OnError=""Continue""/></soa:updates></soa:UpdateListItems></x:Body></x:Envelope>"
Set node_updates = xmlUpdateShell.SelectSingleNode("/x:Envelope/x:Body/soa:UpdateListItems/soa:updates/Batch")
For Each i In cUpdates
If cUpdates(i).SPAction <> "None" Then
Dim Method_node As IXMLDOMElement
Set Method_node = xmlUpdateShell.createElement("Method")
node_updates.appendChild Method_node
Method_node.setAttribute "ID", cUpdates(i).ID
Method_node.setAttribute "Cmd", cUpdates(i).SPAction
Dim Field_node As IXMLDOMElement
Set Field_node = xmlUpdateShell.createElement("Field")
Method_node.appendChild Field_node
Field_node.setAttribute "Name", "ID"
If cUpdates(i).SPAction <> "New" Then
Field_node.appendChild xmlUpdateShell.createTextNode(cUpdates(i).SPItem)
Else
Field_node.appendChild xmlUpdateShell.createTextNode("New")
End If
If cUpdates(i).SPAction <> "Delete" Then
Set Field_node = xmlUpdateShell.createElement("Field")
Method_node.appendChild Field_node
Field_node.setAttribute "Name", "CustomerID"
Field_node.appendChild xmlUpdateShell.createTextNode(cUpdates(i).ID)
Set Field_node = xmlUpdateShell.createElement("Field")
Method_node.appendChild Field_node
Field_node.setAttribute "Name", "Title"
Field_node.appendChild xmlUpdateShell.createTextNode(cUpdates(i).Name)
End If
End If
Next i
'we invoke the web service
'use this code snippet to invoke a web service which requires authentication
objHttp.Open "POST", sURL, False
objHttp.SetRequestHeader "Content-Type", "text/xml"
objHttp.SetRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems"
objHttp.send xmlUpdateShell.XML
'MsgBox objHttp.responseText
End Sub