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.
