我正在尝试创建一个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对象。
1条答案
按热度按时间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
如上面的代码所示,我尝试使用的连接字符串是:
即使在允许公司中的任何人使用Sharepoint List之后,Excel报告说它无法找到表“SubmissionsTest”。根据上面帖子的建议,我查找了列表的GUID值。它返回一个字符串,看起来像这样:
有一次,我把连接字符串改为:
该代码现在适用于所有人。我的结论是,在SharePoint O365上,表名不一定是可信的。有时,需要直接引用GUID值。