excel - 如何在通过 VBA 在 Sharepoint 中编辑 Excel 文件时处理共同创作
问题描述
我有一个存储在 Sharepoint 中的 excel 文件(也可以通过 Microsoft Teams 访问),路径为:https://organization.sharepoint.com/PathOfFile/myFile.xlsx
使用 Sharepoint 中的共同创作功能,可以多人同时编辑该文件。
我想使用本地存储在我的计算机中的另一个 excel 文件来访问和修改 Sharepoint 中的那个。这个本地文件有一个按钮,里面有这个 VBA 代码:
Sub UpdateSP():
f_name = "https://organization.sharepoint.com/PathOfFile/myFile.xlsx"
Workbooks.Open f_name
Workbooks("myFile.xlsx").Activate
ActiveWorkbook.Sheets("sheet1").Activate
Range("A" & Rows.Count).End(xlUp).Offset(1).Select
ActiveCell.Value = 9999
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = 0000
ActiveWorkbook.Close SaveChanges:=True
End Sub
原则上它可以工作,Sharepoint 中的文件被修改了。但是,如果有人在我运行代码时编辑文件,就会出现问题,然后似乎创建了两个版本的文件,一个用于在线实时编辑,一个用于我的代码。
如果发生这种情况,文件的在线版本将不会显示代码所做的更改,并且每当使用 excel 应用程序打开文件时,都会弹出一个窗口,询问应该保留哪个版本的文件,丢失所有在已处置版本中所做的更改。
我曾尝试使用CanCheckOut
andCheckOut
方法,但无论出于何种原因CanCheckOut
总是返回False
(这里有一些关于相同问题的问题,但我无法找到解决方案)。
有人可以建议解决这个问题吗?谢谢。
解决方案
我不是 100% 确定它会在 SharePoint 上运行,但理论上,ADODB 是一个 VBA 库,它具有使用 Microsoft Jet Engine 的对象语法,因此您可以打开文件 AdLockOptimistic---ally。((在 ADO.net 中查找锁类型))
这适用于文件目录,因此如果正在修改的数据库是打开的,它将处理更新。
无需使用 Excel 的应用程序打开文件,而是建立 ADO 连接,然后指定 Lock 的类型,以便访问其中的 Excel 工作表和表格。
这适用于共享/网络驱动器,所以我猜既然 SharePoint 可以映射为文件资源管理器驱动器,那么 ADO 应该可以工作并且值得一试。
这是一个让您入门的基本示例:ADO 问题
推荐阅读
- xilinx - Vivado:在 Tools->Create-and-Package-New-IP 之后,components.xml 输出做什么?
- r - 如何计算不包括自己公司的行业中位数
- azure - Microsoft Graph Explorer 为用户返回空的 businessPhones
- c - 如何使用 GDI 将 RGB 位图绘制到窗口?
- ruby - 如何在 Ruby 中使用每个循环写入新的 csv 行
- algorithm - 将 MLB 逐个播放记录翻译成描述性文本的算法
- python - 如何编写具有不同预测结果的 scikit-lean 估计器
- r - 如何使概率分布成为R中函数的参数?
- c - 如何向我的 ls-al c 程序添加权限?
- image - 为什么图像质量会随着分辨率的提高而提高?