Ух ты, ты так далеко в кроличьей норе ...
Хорошо, код, который вы просматриваете, дает вам представление о списке SharePoint, который, возможно, не лучшее место для начала, но тот факт, что все это делается в VBA, делает его действительно сложным. У меня есть .NET C # код для запроса списка и получения элементов, которые имеют определенное значение. Преобразование VBA я не могу сделать.
public static string GetPageId(string listName, string webPath, string pageTitle)
{
string pageId = "";
IntranetLists.Lists lists = new IntranetLists.Lists();
lists.UseDefaultCredentials = true;
lists.Url = webPath + "/_vti_bin/lists.asmx";
XmlDocument doc = new XmlDocument();
doc.LoadXml("<Document><Query><Where><Contains><FieldRef Name=\"Title\" /><Value Type=\"Text\">" + pageTitle + "</Value></Contains></Where></Query><ViewFields /><QueryOptions /></Document>");
XmlNode listQuery = doc.SelectSingleNode("//Query");
XmlNode listViewFields = doc.SelectSingleNode("//ViewFields");
XmlNode listQueryOptions = doc.SelectSingleNode("//QueryOptions");
Guid g = GetWebID(webPath);
XmlNode items = lists.GetListItems(listName, string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, g.ToString());
foreach (XmlNode listItem in SPCollection.XpathQuery(items, "//sp:listitems/rs:data/z:row"))
{
XmlAttribute id = listItem.Attributes["ows_Id"];
if (id != null)
{
pageId = id.Value;
}
}
return pageId;
}
IntranetLists - это веб-ссылка .net на файл lists.asmx.
Вам нужно будет изучить, как использовать веб-сервис lists.asmx из VBA,
Затем вам нужно будет вызвать GetListItems с запросом, который представляет значение столбца, которое вы хотите найти.
<Where><Contains><FieldRef Name="Title" /><Value Type="Text">MyValue</Value></Contains></Where>
Синтаксис этого запроса: CAML
тогда вам нужно будет проанализировать возвращаемый xml, чтобы найти элемент и поле элемента с требуемым значением.
Любой запрос xpath должен иметь добавленные правильные пространства имен, например
public static XmlNodeList XpathQuery(XmlNode xmlToQuery, string xPathQuery)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlToQuery.OuterXml);
XmlNamespaceManager mg = new XmlNamespaceManager(doc.NameTable);
mg.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/");
mg.AddNamespace("z", "#RowsetSchema");
mg.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
mg.AddNamespace("y", "http://schemas.microsoft.com/sharepoint/soap/ois");
mg.AddNamespace("w", "http://schemas.microsoft.com/WebPart/v2");
mg.AddNamespace("d", "http://schemas.microsoft.com/sharepoint/soap/directory");
return doc.SelectNodes(xPathQuery, mg);
}
Однако я не уверен, что у вас даже был бы доступ к чему-то, что могло бы проанализировать xml в вашей настройке VBA, поэтому вам, возможно, придется скачать какой-то дополнительный инструмент VBA для этого - возможно, даже заблокированный для вас.
Надеюсь, это немного поможет.