Сбой Excel при проверке неизмененной книги Excel на SharePoint с помощью VBA

Я работаю над проектом vba, который по сути выглядит как это:

if workbooks.canCheckOut(filename) = true then    
  workbooks.CheckOut(filename)
  set workbookVariable = workboooks.Open(filename)
else    
   ' Pesudocode: Display error message
   '             Quit
end if

' Pseudocode: Do some stuff with workbookVariable.    
If workbookVariable.saved = false then     
    workbookVariable.save
end if

If workbookVariable.canCheckIn then    
    workbookVariable.checkIn
    Set workbookVariable = Nothing
else    
    msgbox "Error message goes here", vbCritical
end if    
' Pseudocode: quit

(Редактировать: у меня было «If workbookVariable.Saved = True», что было неверно. Нет смысла сохранять файл, если он уже сохранен... Так что теперь это обновлено, чтобы отразить то, что у меня есть на самом деле.)

Если рабочая книга изменена и сохранена, все работает нормально. Он сохраняется, возвращается в SharePoint, и программа завершается нормально.

Однако, если рабочая книга не изменяется, когда она переходит к проверке в части программы, происходит сбой Excel, и я получаю сообщение об ошибке: «Ошибка автоматизации».

Я даже пытался ввести команду ожидания после команды checkIn, но безуспешно...

Что здесь происходит? Может ли кто-нибудь указать мне в правильном направлении?


person Steven C. Britton    schedule 10.02.2013    source источник
comment
Возможно, каждый раз вы можете попытаться сохранить, чтобы увидеть, сохраняется ли проблема. Хотя вы можете не вносить никаких изменений в файл.   -  person bonCodigo    schedule 10.02.2013
comment
На самом деле я проверил это, и это решило проблему; хотя это не тот путь, которым я на самом деле собираюсь идти.   -  person Steven C. Britton    schedule 11.02.2013
comment
Правда, это всего лишь прикрытие, а не решение настоящей проблемы ;)   -  person bonCodigo    schedule 11.02.2013


Ответы (1)


Если изменений не было (workbookVariable.saved = true), используйте workbookVariable.CheckIn(False). Вы не хотите CheckIn переделывать, точно такую ​​же, как оригинал. Пустая трата места как минимум. Это должно отбросить ваш «CheckOut». См. MSDN.

Спасибо этой странице за указывая на то, что должно было быть очевидным.

Последний пункт любопытства: зачем проверять книгу, если вы не можете вносить в нее изменения?

person Michael Richardson    schedule 12.02.2013
comment
Как оказалось, в итоге я не стал его проверять, а вместо этого проверил наличие блокировки файла. Моя главная причина для проверки заключалась в том, что макрос мог внести изменения, но пока он не запустился, мы не знали, произойдут ли они. - person Steven C. Britton; 12.02.2013
comment
Кстати, я попробовал workbookVariable.checkIn False (без круглых скобок), однако это также потерпело крах. - person Steven C. Britton; 12.02.2013