Załącznik z przykładami dla tego rozdziału znajduje się w tym miejscu.
Załącznik z przykładami dla tego rozdziału znajduje się w tym miejscu.
W tym rozdziale zajmiemy się obsługą plików Excel z poziomu języka VBA. Nauczymy się jak tworzyć, otwierać, zapisywać dane w innym pliku niż ten, w którym zawarty jest kod programu.
W tego typu operacjach kluczowymi obiektami są obiekty nazwane Workbooks oraz ActiveWorkbook. Dzięki ich właściwościom, a przede wszystkim metodom możemy dokonywać praktycznie wszystkich operacji na zewnętrznych plikach programu Excel. W paru słowach omówimy najważniejsze z nich:
- Workbooks.Add - otwiera nowy, czysty skoroszyt (plik programu Excel).
- ActiveWorkbook.Save - zapisuje aktywny skoroszyt. Polecenie to można rozszerzyć do postaci ActiveWorkbook.SaveAs (czyli "Zapisz jako") - wówczas należy podać szereg argumentów po przecinku. Są to kolejno: FileName - ścieżka pliku do zapisania, FileFormat - format pliku (w przypadku *.xls przyjmuje wartość "xlExcel8"), Password - hasło zabezpieczające plik przed otwarciem (opcjonalnie, w cudzysłowiu), WriteResPassword - hasło zabezpieczające przed zapisem. Istnieje jeszcze kilka parametrów możliwych do skonfigurowania w tym miejscu, jednak nie będziemy się nad nimi skupiać, ze względu na fakt, iż są rzadziej używane. Zainteresowanych czytelników chciałbym odesłać do pomocy (wystarczy wpisać tam w oknie wyszukiwania: "Workbook.SaveAs Method").
- Workbooks.Open - kolejna metoda, która pozwala na otwarcie dowolnego pliku Excel. Najważniejszym parametrem jest FileName, po którym podajemy ścieżkę do plik, który chcemy otworzyć.
- ActiveWorkbook.Save - zapisuje aktywny skoroszyt.
- ActiveWindow.Close - zamyka aktywne okno.
Przełączanie pomiędzy oknami można wykonać poprzez użycie polecenia Windows("nazwa otwartego skoroszytu w cudzysłowiu").Activate. W celu prostej prezentacji powyższych poleceń, zbudujemy prostą procedurę uruchamianą przyciskiem, która otworzy plik o nazwie "liczby.xls" zapisany na dysku "C:", następnie otworzy nowy plik i nazwie go "liczba_jedna.xls", po czym przepisze wartość z komórki A20 pierwszego pliku do komórki A1 drugiego, zapisując i zamykając po wszystkim oba pliki:
Sub utworz_pobierz_zapisz()
Workbooks.Open Filename:="C:\liczby.xls"
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="C:\liczba_jedna.xls", FileFormat:=xlExcel8
Workbooks("liczba_jedna.xls").Sheets(1).Cells(1, 1) = Workbooks("liczby.xls").Sheets(1).Cells(20, 1)
ActiveWorkbook.Save
ActiveWindow.Close
Windows("liczby.xls").Activate
Workbooks("liczby.xls").Close
End Sub
Pliki źródłowe zawierający powyższy przykład (oraz z liczbami) są do pobrania na początku rozdziału.Zauważmy w powyższym kodzie, jeden istotny element: nie musimy koniecznie przełączać się pomiędzy plikami metodą Windows.Activate, aby pobrać z nich wartości, lub je do nich zapisać - wystarczy użyć standardowego odwołania do komórek, poprzedzonego poleceniem Workbooks gdzie w nawiasie podajemy nazwę danego skoroszytu Excel. Dodajmy, iż w używając odpowiedniej kombinacji powyższych poleceń w pętli, bardzo łatwo moglibyśmy przygotować generator podobnych plików o określonych nazwach: gdybyśmy mieli plik wzorca, moglibyśmy go otwierać, modyfikować i zapisywać pod zmienioną nazwą określoną ilość razy, dzięki czemu możliwe byłoby szybkie utworzenie nawet setek takich plików w bardzo krótkim czasie.