Feb 22 2010

Wtorki z VBA cz. 18 – Zapisywanie i zamykanie skoroszytów

Posted by Marcin

Przedstawione w ostatnim poście traktującym o VBA zapisywanie arkuszy nie jest niczym specjalnym - warto jednak poznać obiekty i metody zarządzające skoroszytami. Dziś rozbudujemy nieco naszą bazę wiedzy dodając do naszego makra funkcje zamknięcia skoroszytów.

Bogaci w wiedzę i doświadczenia z ostatniego postu możemy się domyślać, że takie makro jest bardzo proste. Bo cóż trudnego w napisaniu programu, który przejrzy za pomocą pętli całą kolekcję Workbooks i każdy z jej elementów zapisze i zamknie? Może to wyglądać tak:

 
Sub ZapiszIZamknij()
 
Dim Plik As Workbook
 
    For Each Plik In Workbooks
        Plik.Close savechanges:=True
    Next Plik
 
End Sub
 

Uruchamiamy i tu niespodzianka: jeśli mamy pecha i plik, w którym zapisaliśmy makro był jednym z pierwszych w kolekcji to po jego zamknięciu makro skończy swą pracę nie zamykając wszystkich plików, a raczej nie o to nam chodziło. Aby temu zaradzić, musimy tak zaprojektować makro, aby plik zawierający jego kod był zamykany na końcu. Pora na praktykę:

 
Sub ZapiszIZamknij2()
 
Dim Plik As Workbook
 
    For Each Plik In Workbooks
    	If Plik.Name<>ThisWorkbook.Name Then
	        Plik.Close savechanges:=True
	    End If
    Next Plik
    ThisWorkbook.Close savechanges:=True
 
End Sub
 

Przyznam się szczerze, że stając kiedyś przed tym problemem nie zwróciłem uwagi na tę kwestię. To tylko dowodzi, że programując nie zawsze uda nam się przewidzieć wszystkie niuanse - warto testować nasz program w różnych warunkach i dla różnych zakresów danych wejściowych.

Powiązane artykuły:

Leave a Reply