Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过VBA在Sharepoint中编辑Excel文件时处理协同创作_Excel_Vba_Sharepoint - Fatal编程技术网

如何通过VBA在Sharepoint中编辑Excel文件时处理协同创作

如何通过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

我在Sharepoint中存储了一个excel文件(Microsoft团队也可以访问该文件),路径为:
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