我在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
这也给出了同样的错误。
答案 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, ""