无法使用共享链接将记录从Excel VBA添加到Sharepoint列表

xdnvmnnf  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(211)

我正在尝试创建一个Excel用户表单,以便向Sharepoint列表中添加新记录。问题是此表单需要对组织中的所有用户可用,而不需要对列表授予特定权限。
Sharepoint列表的基本URL如下所示:https://myorg.sharepoint.com/personal/myname/;LIST=SubmissionsTest;
但是,此链接仅对我有效。如果我尝试与公司中的人员共享列表,Sharepoint会为我提供如下所示的链接:https://myorg.sharepoint.com/:l:/g/personal/myname/arandom50charactertextstring
测试用户已确认他们可以通过第二个链接访问列表,但不能通过第一个链接。
为了将记录从Excel推送到List中,我创建了以下VBA代码:

Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

mySQL = "SELECT * FROM SubmissionsTest;"

With cnt
    .ConnectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;" _
    & "DATABASE=https://myorg.sharepoint.com/personal/myname/;LIST=SubmissionsTest;"
    .Open
End With
rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic

rst.AddNew
    rst.Fields("Title") = Int(Now() * 100000)
    rst.Fields("testEntry") = "This is a test submission"
    rst.Fields("testSubmitter") = Environ("UserName")
rst.Update

If CBool(rst.State And adStateOpen) = True Then rst.Close
If CBool(cnt.State And adStateOpen) = True Then cnt.Close

MsgBox "Your submission has been received."

当我运行此代码时,它运行正常。正如预期的那样,它不能为我的测试用户运行。但是,当我尝试将SharePoint提供的第二个链接替换为连接字符串时,此代码不再为我或我的测试用户运行。相反,我们收到错误消息,告诉我们找不到SubmissionsTest对象。
我还没有能够弄清楚我如何可以调整这个代码,使共享链接被识别。有人有任何想法,如何可以做到这一点?
提前感谢您的任何建议。

up9lanfz

up9lanfz1#

好的,我在研究了Microsoft论坛上的这篇帖子后找到了解决方案:https://social.technet.microsoft.com/Forums/en-US/2a1b718a-e9a5-4a1d-96a9-97804ebef769/vba-to-insert-record-to-an-existing-sharepoint-online-list?forum=sharepointgeneral
如上面的代码所示,我尝试使用的连接字符串是:

DATABASE=https://myorg.sharepoint.com/personal/myname/;LIST=SubmissionsTest;

即使在允许公司中的任何人使用Sharepoint List后,Excel仍报告无法找到表“SubmissionsTest”。根据上面帖子的建议,我查找了List的GUID值。返回的字符串类似于以下内容:

<LIST><VIEWGUID>alongstringofalphanumericcharacters</VIEWGUID>
<LISTNAME>anotherstringofcharacters</LISTNAME>
<LISTWEB>https://myorg.sharepoint.com/personal/myname/</LISTWEB>
<LISTSUBWEB></LISTSUBWEB><ROOTFOLDER></ROOTFOLDER></LIST>

一旦我将连接字符串更改为:

DATABASE=https://myorg.sharepoint.com/personal/myname/;LIST={anotherstringofcharacters};

该代码现在对每个人都有效。2我的结论是,在SharePointO365上,表名不一定是可信的。3有时,需要直接引用GUID值。

相关问题