在 VBA 中签出工作簿

1 excel sharepoint vba

我有一些 VBA,我想在进行更改之前查看工作簿。VBA 代码位于其自己的工作簿中,并由用户打开另一个工作簿并选择执行代码以修改工作簿的按钮来激活。一开始我想检查作业簿是否已签出。我遇到的问题是 Workbooks.CanCheckOut(ActiveWorkbook.FullName) 始终返回 false,即使工作簿未签出也是如此。

If Workbooks.CanCheckOut(ActiveWorkbook.FullName) = True Then
    Workbooks.CheckOut (ActiveWorkbook.FullName)
    MsgBox "This workbook has been checked out"
    Process = True
ElseIf ActiveWorkbook.CanCheckIn = False Then 'if not checked out
    Process = False
    MsgBox ("The Document may not be checked out, Import Process is ending.")
Else
    Process = True
End If 'If CanCheckin = False
Run Code Online (Sandbox Code Playgroud)

预先感谢您的帮助。

Mar*_*ald 5

通过反复试验,我发现Workbooks.CanCheckOut (Filename:= FullName)FullName 是 SharePoint 文件的 URL仅适用于未在当前 Excel 实例中打开的文件。

False如果您在当前 Excel 实例中打开文件,则该方法将始终返回,这显然是这种情况。

Workbooks.CheckOut (ActiveWorkbook.FullName)打开文件,检查它,然后莫名其妙地关闭文件。因此,打开和签出 SharePoint 文件只需 3 个步骤。

Sub CheckOutAndOpen()
Dim TestFile As String

    TestFile = "http://spserver/document/Test.xlsb"
    If Workbooks.CanCheckOut(TestFile) = True Then
        Workbooks.CheckOut(TestFile)
        Workbooks.Open (TestFile)
    Else
        MsgBox TestFile & " can't be checked out at this time.", vbInformation
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

这有点违反直觉,因为在手动处理 SharePoint 文件时,您必须打开它们以查看是否可以签出它们,然后执行签出操作。

MSDN 或 Excel VBA 都没有提到,Workbooks.CanCheckOut (Filename:= FullName)如果在当前 Excel 实例中打开文件,该方法始终返回 False。