Workbook.CheckIn在第一次调用时总是产生错误?

时间:2015-04-18 00:00:13

标签: excel vba excel-vba sharepoint-2007

我在Sharepoint 2007上的文档库中存储了一些工作簿。我想查看工作簿,修改它并重新检入。

使用以下代码:

Option Explicit

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()

Dim bk As Workbook
Dim path As String

path = "http://sharepoint/sites/test/TEST_Relink.xlsm"

If Workbooks.CanCheckOut(path) Then
    Application.DisplayAlerts = False
    Workbooks.CheckOut path
    DoEvents
    Set bk = Workbooks.Open(path, False)
    bk.Sheets("test").Range("h1").Value = "modified " & Now
    DoEvents
    Sleep 10000
    bk.checkIn True
    Application.DisplayAlerts = True
End If


End Sub

bk.checkIn调用始终产生以下运行时错误:

Method 'CheckIn' of object '_Workbook' failed

进入调试后,我按F5继续,办理登机手续总是成功。

我用Sleep 10000添加了10秒的延迟,因为我在考虑签出可能需要一段时间才能传播到服务器。但无论我为Sleep设置了多少时间,同样的问题仍然存在。有什么想法吗?

编辑:

我尝试使用.CanCheckIn的循环检查,如下所示:

While Not bk.CanCheckIn
DoEvents
Wend
bk.checkIn True

这也给出了同样的错误。

3 个答案:

答案 0 :(得分:2)

对于那些像我一样发现这个的人,我有

Workbooks(logFileName).CheckIn SaveChanges:=True, Comments:="New row added from " & mainFile

这会产生与您类似的错误消息,但是在进入调试时按f5会动作。所以这是我的复杂解决方案.....我只是将代码拆分为以下

Workbooks(logFileName).Save
Workbooks(logFileName).CheckIn Comments:="New row added from " & mainFile 

希望这有助于其他人。

答案 1 :(得分:0)

使用此:

Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.AutomationSecurity = msoAutomationSecurityForceDisable
xl.EnableEvents = False
xl.DisplayAlerts = False

'code to checkin/checkout

xl.EnableEvents = True
xl.DisplayAlerts = True

答案 2 :(得分:0)

你可能已经想出来了,但我想我会把它发给其他来这里寻找答案的人。

如果您将SaveChanges设置为True,那么您还必须将Comments设置为字符串(空值不会这样做)

因此,在您的示例中,您需要执行此操作:

bk.CheckIn True, ""