首页 > 解决方案 > 如何在通过 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 应用程序打开文件时,都会弹出一个窗口,询问应该保留哪个版本的文件,丢失所有在已处置版本中所做的更改。

我曾尝试使用CanCheckOutandCheckOut方法,但无论出于何种原因CanCheckOut总是返回False(这里有一些关于相同问题的问题,但我无法找到解决方案)。

有人可以建议解决这个问题吗?谢谢。

标签: excelvbasharepoint

解决方案


我不是 100% 确定它会在 SharePoint 上运行,但理论上,ADODB 是一个 VBA 库,它具有使用 Microsoft Jet Engine 的对象语法,因此您可以打开文件 AdLockOptimistic---ally。((在 ADO.net 中查找锁类型))

这适用于文件目录,因此如果正在修改的数据库是打开的,它将处理更新。

无需使用 Excel 的应用程序打开文件,而是建立 ADO 连接,然后指定 Lock 的类型,以便访问其中的 Excel 工作表和表格。

这适用于共享/网络驱动器,所以我猜既然 SharePoint 可以映射为文件资源管理器驱动器,那么 ADO 应该可以工作并且值得一试。

这是一个让您入门的基本示例:ADO 问题


推荐阅读