2015-04-18 6 views
1

У меня есть несколько рабочих книг, хранящихся в библиотеке документов на Sharepoint 2007. Я хочу, чтобы проверить книгу, изменить его, и проверить его обратно вWorkbook.CheckIn всегда производит ошибку при первом вызове?

Используя следующий код:.

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 

После захожу в Debug, жму F5 продолжать и регистрация всегда происходит успешно.

Я добавил 10-секундную задержку с Sleep 10000, потому что я думал, что, возможно, выезд потребовался некоторое время для распространения на сервер. Но независимо от того, сколько времени я установил для Sleep, эта же проблема сохраняется. Есть предположения?

EDIT:

Я попытался с помощью зацикленной проверку .CanCheckIn следующим образом:

While Not bk.CanCheckIn 
DoEvents 
Wend 
bk.checkIn True 

Это дало ту же ошибку.

+0

попробуйте использовать [CanCheckIn] (https://msdn.microsoft.com/en-us/library/office/aa223808 (v = office.11) .aspx), [CanCheckOut] (https://msdn.microsoft .com/en-us/library/office/aa223809 (v = office.11) .aspx) (возможно, также завершает цикл времени с рядом попыток вокруг этих проверок, если необходимо) – amdixon

+0

@amdixon, это дало мне ту же ошибку (см. править). – sigil

ответ

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 
+0

Это дало мне ту же ошибку. – sigil

0

Вы, наверное, уже понял это, но я думал, что я отправлю его для кого-то, кто приходит сюда в поисках ответа.

Если вы устанавливаете SaveChanges в True, то вы должны также установить Comments быть String (нулевое значение не будет делать)

Таким образом, в вашем примере вы должны были бы сделать это:

bk.CheckIn True, ""

+0

Это дает ту же ошибку. – sigil

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 

Надеюсь, это поможет другим.

+0

Вызов '.Save' перед' .CheckIn' работал для меня. Благодарю. – Snorfalorpagus

Смежные вопросы