Start > Kursy on-line > Excel - makra i VBA

Excel - makra i VBA


Obsługa zewnętrznych plików MS Excel

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.