2013-02-10 38 views
5

Pracuję na projektu, który zasadniczo wygląda następująco:Excel Upaść podczas odprawy niezmodyfikowanej skoroszytu programu Excel do programu SharePoint z 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 

(Edit: Miałem „Jeśli workbookVariable.Saved = True”; Nie ma sensu zapisywanie pliku, jeśli jest już zapisany ... Teraz jest to zaktualizowane, aby odzwierciedlić to, co naprawdę mam.)

Jeśli skoroszyt zostanie zmodyfikowany i zostanie zapisany, wszystko działa poprawnie. Zapisuje się, zostaje ponownie sprawdzony w programie SharePoint, a program kończy się normalnie.

Jednak, jeśli skoroszyt nie zostanie zmodyfikowany, gdy przejdzie do sprawdzenia w części programu, program Excel ulega awarii i pojawia się komunikat o błędzie: "Błąd automatyzacji".

Próbowałem nawet wprowadzenie polecenia oczekiwania po poleceniu checkIn, bez powodzenia ...

Co tu się dzieje? Czy ktoś może wskazać mi właściwy kierunek?

+1

Być może za każdym razem, gdy możesz spróbować zapisać, czy problem nadal występuje. Chociaż możesz nie modyfikować pliku. – bonCodigo

+1

Tak naprawdę to testowałem i rozwiązałem problem; chociaż nie tak naprawdę zamierzam jechać. –

+0

To prawda, to tylko * ukrywanie się *, nie rozwiązując prawdziwego problemu;) – bonCodigo

Odpowiedz

0

Gdy nie wprowadzono żadnych zmian (workbookVariable.saved = true) użyj workbookVariable.CheckIn(False). Nie chcesz, aby CheckIn wersja była dokładnie taka sama jak oryginał. Strata przestrzeni przynajmniej. To powinno odrzucić twój "CheckOut". Zobacz MSDN.

Dzięki this page za wskazanie tego, co powinno być oczywiste.

Ostatni punkt ciekawości: dlaczego warto wypróbować skoroszyt, jeśli nie wprowadzono w nim żadnych zmian?

+0

Okazało się, że nie sprawdziłem, ale sprawdziłem, czy nie ma blokady pliku. Moim głównym powodem sprawdzenia tego było to, że makro _might_ wprowadziło zmiany, ale dopóki nie zostało uruchomione, nie wiedzieliśmy, czy to zrobi. –

+0

Nawiasem mówiąc, próbowałem workbookVariable.checkIn False (bez nawiasów), jednak również się zawiesił. –

Powiązane problemy