如何通过VBA在Sharepoint中编辑Excel文件时处理协同创作
我在Sharepoint中存储了一个excel文件(Microsoft团队也可以访问该文件),路径为:如何通过VBA在Sharepoint中编辑Excel文件时处理协同创作,excel,vba,sharepoint,Excel,Vba,Sharepoint,我在Sharepoint中存储了一个excel文件(Microsoft团队也可以访问该文件),路径为:https://organization.sharepoint.com/PathOfFile/myFile.xlsx 通过Sharepoint中的“共同创作”功能,可以同时对文件进行多个编辑 我想使用存储在本地计算机中的另一个excel文件来访问和修改Sharepoint中的文件。此本地文件有一个按钮,其中包含以下VBA代码: Sub UpdateSP(): f_name = &quo
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
和CheckOut
方法,但是CanCheckOut
总是返回False
,无论出于何种原因(这里有一些问题与同一问题有关,但我一直无法找到解决方案)
有人能提出这个问题的解决方案吗?谢谢。我不能100%肯定它能在SharePoint上运行,但理论上,ADODB是一个VBA库,它具有使用Microsoft Jet引擎的对象语法,因此您可以打开文件。((在ADO.net中查找锁类型)) 这在文件目录的基础上工作,因此如果正在修改的数据库是打开的,它将处理更新 与使用Excel的应用程序打开文件不同,您可以建立ADO连接,然后指定锁的类型,以便访问其中的Excel工作表和表格 这适用于共享/网络驱动器,所以我猜既然SharePoint可以映射为文件浏览器驱动器,那么ADO应该可以工作,值得一试
下面是一个基本示例,可以帮助您入门:在激活工作簿后尝试启用自动保存 为此,请添加以下行:
ActiveWorkbook.AutoSaveOn=True
在工作簿(“myFile.xlsx”)之后。激活行
我在协作文件方面也遇到过类似的问题,确保启用自动保存解决了这个问题。为了能够以这种方式合并更改,您的代码必须在协作上下文中运行
代码必须在从同一源URL(Sharepoint或OneDrive)打开的同一文档中运行,而不是从另一个文档或本地副本打开文档,这样,外接程序或宏可以进行Excel本身将在共同编写上下文中处理的更改
我建议查看一下Office开发中心,包括其中的链接文章(特别是“合著”,重定向到支持中心,以及底部的“关于Excel中的合著(VBA)”以及更多示例)。CanCheckOut
如果工作簿打开,将始终返回false。因此,您必须在触摸它之前进行检查。CheckOut
命令将不会打开文件,因此在签出后我们还必须有一个open语句
用你的例子来看,它是这样的
Option Explicit
Public Sub UpdateSP()
Dim fName As String
fName = "https://organization.sharepoint.com/PathOfFile/myFile.xlsx"
If Workbooks.CanCheckOut(fName) Then
Workbooks.CheckOut fName
Dim myFile As Workbook
Set myFile = Workbooks.Open(fName)
Dim mySheet As Worksheet
Set mySheet = myFile.Sheets("Sheet1")
Dim startRange As Range
Set startRange = mySheet.Range("A" & mySheet.Rows.Count).End(xlUp).Offset(1)
startRange.Value = 9999
startRange.Offset(0, 1).Value = 0
myFile.Close SaveChanges:=True
Else
MsgBox fName & " can't be checked out at this time.", vbInformation
End If
End Sub