VBA通过ADODB更新SharePoint列表时卡在字段赋值或Update步骤咨询
问题排查与解决
该问题可能与站点权限配置有关,也存在其他触发原因,可按以下方向排查:
- 权限类排查
首先确认你在异常站点对目标列表拥有「编辑所有条目」权限,部分企业SharePoint站点会默认限制成员仅能编辑自身创建的条目,若待更新的ID=200记录非你创建,会导致更新操作被后端拦截无响应。同时检查列表设置是否开启了「必须签出才能编辑」,若开启需先执行条目签出操作再更新字段。 - 字段配置类排查
确认异常站点的Date字段配置和你自建站点一致:如果目标站点的Date字段设置了包含时间、或存在自定义校验规则(如日期范围限制、必须大于条目创建日期等),不符合规则的赋值会触发后端校验卡住。可先遍历记录集的字段属性,确认Date字段的类型、校验规则和预期一致。 - 连接参数适配排查
部分企业级SharePoint站点启用了更高版本的服务协议或多因素认证,旧版ACE OLEDB 12.0驱动兼容性不足,可尝试将连接字符串中的IMEX=0修改为IMEX=2,同时确认目标列表的内部名称与查询时使用的List1一致,部分场景下列表显示名称和内部名称不同会导致查询到空记录集,后续操作无响应。
优化后的代码片段
增加错误捕获和字段存在性判断,避免无提示卡住:
' 增加错误捕获 On Error Resume Next JRVCS = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=https://sites.123.com/sites/abc/def/;LIST=" JRVList = JRVCS & "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX};" Set JRVConn = New ADODB.Connection Set JRVRSet = New ADODB.Recordset With JRVConn .ConnectionString = JRVList .Open End With mySQL = "SELECT * FROM [List1] WHERE [ID] = 200;" JRVRSet.Open mySQL, JRVConn, adOpenDynamic, adLockOptimistic If Not JRVRSet.EOF Then ' 先校验字段是否存在 Dim dateFldExists As Boolean dateFldExists = False Dim fld As ADODB.Field For Each fld In JRVRSet.Fields If fld.Name = "Date" Then dateFldExists = True Exit For End If Next If Not dateFldExists Then MsgBox "目标列表不存在Date字段" GoTo Cleanup End If JRVRSet.Fields("Feild 1") = "Value 1" ' 直接用Date函数避免格式转换兼容性问题 JRVRSet.Fields("Date") = Date + 1 JRVRSet.Update ' 捕获更新错误 If Err.Number <> 0 Then MsgBox "更新失败,错误信息:" & Err.Description Err.Clear End If End If Cleanup: If CBool(JRVRSet.State And adStateOpen) = True Then JRVRSet.Close: Set JRVRSet = Nothing If CBool(JRVConn.State And adStateOpen) = True Then JRVConn.Close: Set JRVConn = Nothing
内容的提问来源于stack exchange,提问作者Joseph Kachappilly
相关产品推荐
相关产品推荐

