使用共享链接从Excel VBA向SharePoint列表添加记录

huwehgph  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(188)

我正在尝试创建一个Excel用户表单,该表单将向SharePoint列表添加新记录。
此表单需要对我的组织中的所有用户都可用,而不需要对列表进行特别授权。
SharePoint列表的基本URL如下所示:https://myorg.sharepoint.com/personal/myname/;LIST=SubmissionsTest;
这个链接只对我有用。如果我尝试共享列表,SharePoint会提供如下所示的链接:https://myorg.sharepoint.com/:l:/g/personal/myname/arandom50charactertextstring
测试用户确认他们可以通过第二个链接访问列表,但不能通过第一个链接。
为了将记录从Excel推送到列表中,我创建了以下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对象。

hc2pp10m

hc2pp10m1#

好吧,我在研究了微软论坛上的这篇文章后找到了解决方案: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”。根据上面帖子的建议,我查找了列表的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};

该代码现在适用于所有人。我的结论是,在SharePoint O365上,表名不一定是可信的。有时,需要直接引用GUID值。

相关问题