Część 6. Pobieranie nazw plików

Zmienne

Wszystkie potrzebne dane będziemy dodawać do naszego programu jako tak zwane zmienne, w których przechowywane są tymczasowe jednorazowo pobrane informacje. Każda zmienna musi mieć swoją niepowtarzalną nazwę, która nie występuje jako składnia języka programowania. Może zawierać litery i cyfry, nie może zawierać spacji, polskich znaków i znaków specjalnych. Program musi zostać też poinformowany, że wpisany przez nas tekst jest zmienną, w tym celu piszemy przed nim  „Dim” i dajemy spacje teraz aplikacja wie, że tekst, który wpisaliśmy po „Dim” to nazwa naszej zmiennej. Za każdym razem musimy określić też typ zmiennej. Nasza aplikacja jest bardzo prosta więc będziemy używać dwa standardowe typy zmiennych i jeden typ niestandardowy dla innych języków. Pierwszym jest ciąg znaków czyli „String”, drugim liczba całkowita opisywana jako „Integer”. Naszym typem niestandardowym jest „Worksheet” czyli arkusz roboczy, jest to tak naprawdę klasa, a nie zmienna gdyż za jej pomocą odnosimy się do konkretnych parametrów arkusza i możemy wywołać wbudowane funkcje, takie jak na przykład zamykanie arkusza, bądź zapis.

Zaczynamy!

Wprowadzimy najpierw sobie trzy zmienne: „Katalog”, „NazwaPliku” oraz „Arkusz”.

Sub pobieranie_danych()

Dim Katalog as String
Dim NazwaPliku as String
Dim Arkusz as Worksheet

End Sub

Mamy już zadeklarowane pierwsze zmienne teraz na podstawie danych pobranych z naszego arkusza do zmiennej „Katalog” przypiszemy ścieżkę.

Sub pobieranie_danych()

Dim Katalog as String
Dim NazwaPliku as String
Dim Arkusz as Worksheet

Katalog = ActiveWorkbook.Path
Katalog = Katalog & "\"

End Sub

ActiveWorkbook oznacza aktywny plik arkusza, Path oznacza jego ścieżkę. Całość zostaje zamieniona na napis do, którego dodajemy na końcu znak „\”. W łatwy sposób możemy sobie zobaczyć jak to działa. Wpiszemy sobie poniższą funkcję, która w komórce A1 w arkuszu „PRZETWARZANIE” wpisze wartość naszej zmiennej.

Sub pobieranie_danych()

Dim Katalog As String
Dim NazwaPliku As String
Dim Arkusz As Worksheet

Katalog = ActiveWorkbook.Path
Katalog = Katalog & "\"
Sheets("PRZETWARZANIE").Cells(1, 1).Value = Katalog

End Sub

Sheets to arkusz , Cells komórka, a Value to wartość, która ma zostać w tę komórkę wpisana. Teraz klikamy w zieloną strzałkę wskazaną na Rysunku 1. Służy ona do uruchamiania makra. Po kliknięciu jeśli wejdziemy sobie w arkusz „PRZETWARZANIE” możemy zobaczyć, że w komórce A1 znajduje się ścieżka do naszego arkusza.

Rysunek 1. Uruchamianie makra

Naszym celem jest aby wyszukać w folderze wszystkie pliki z końcówką dxf czyli można to zapisać jako „*.dxf”. Zapis ten oznacza dowolny ciąg znaków na, którego końcu znajduje się „.dxf”, a więc w ten sposób oddzielamy interesujące nas pliki od innych. Zapiszmy to sobie teraz w postaci kodu, czyli do zmiennej „NazwaPliku” przypiszemy wartość:

NazwaPliku = Dir(Katalog & "*.dxf")

Wykorzystaliśmy tu funkcję Dir(), która zwraca ciąg znaków reprezentujący nazwę pierwszego pliku oraz folderu. W nawiasie dodaliśmy interesujące nas parametry, a więc określiliśmy zakres plików, który będzie nas interesować. Do zmiennej Arkusz przypiszemy nasz arkusz ”PRZETWARZANIE” robimy to jak poniżej:

Set Arkusz = Sheets(„PRZETWARZANIE”)

Teraz przetestujmy jak to wszystko działa. Do komórki A2 wrzucimy dane ze zmiennej „NazwaPliku”. Czyli musimy dorzucić:

Arkusz.Cells(2,1).Value = Nazwa Pliku

Cały kod powinien wyglądać teraz tak:

Sub pobieranie_danych()

Dim Katalog As String
Dim NazwaPliku As String
Dim Arkusz As Worksheet

Katalog = ActiveWorkbook.Path
Katalog = Katalog & "\"
Sheets("PRZETWARZANIE").Cells(1, 1).Value = Katalog
Set Arkusz = Sheets("PRZETWARZANIE")
NazwaPliku = Dir(Katalog & "*.dxf")
Arkusz.Cells(2, 1).Value = NazwaPliku

End Sub

Oczywiście aby uzyskać jakiś wynik musimy mieć w folderze z naszym arkuszem jakiś plik z rozszerzeniem „.dxf”. W każdej chwili możemy to zmienić i wyszukać np. pliki „.jpg”, albo dowolnie inne typy.

Pętla Do While

Makro, które tworzymy aby miało jakąkolwiek przydatność musimy tak zmodyfikować aby wpisywało do tabeli wszystkie pliki jakie znajdują się w naszym folderze. W tym celu wykorzystamy sekwencję kodu zwaną pętlą „Do While”, która wykonuje się w kółko, aż zadana jej zależność nie zostanie spełniona, czyli w naszym przypadku aż nie będzie więcej plików „.dxf”. Połączymy ją z wykorzystaną funkcją Dir(), która bez argumentów w nawiasie zwraca nam kolejny plik. Poniżej przedstawiony jest cały kod.

Sub pobieranie_danych()

Dim Katalog As String
Dim NazwaPliku As String
Dim Arkusz As Worksheet
Dim Wiersz As Integer

Katalog = ActiveWorkbook.Path
Katalog = Katalog & "\"
'Sheets("PRZETWARZANIE").Cells(1, 1).Value = Katalog
Set Arkusz = Sheets("PRZETWARZANIE")
NazwaPliku = Dir(Katalog & "*.dxf")
'Arkusz.Cells(2, 1).Value = NazwaPliku
Wiersz = 1
Do While NazwaPliku <> ""
Arkusz.Cells(Wiersz, 1).Value = NazwaPliku
Wiersz = Wiersz + 1
NazwaPliku = Dir()
Loop

End Sub

Przed dwoma linijkami kodu wstawiliśmy znak „ ’ ” oznacza on komentarz, a wiec część kodu, która nie będzie wykonywana. Jest to bardzo wygodne narzędzie aby opisać sobie sposób działania makra tak aby po jakimś czasie ławo można było do niego powrócić i zmienić co potrzeba. Do kodu dodaliśmy na początku zmienną „Wiersz”, będzie ona oznaczać numer wiersza w arkuszu, do którego makro będzie wklejać nazwy plików. Przypisujemy tej zmiennej początkową wartość jako 1, tak aby wpisywanie zaczynało się w wierszu pierwszym. Następnie tworzymy nasza pętlę. Pętla będzie się wykonywać dopóki zmienna „NazwaPliku” będzie różna od wartości pustej, czyli dopóki będzie jeszcze jakiś plik posiadający nazwę z rozszerzeniem „.dxf”. Do zmiennej Wiersz za każdym powtórzeniem pętli dodajemy 1, dzięki temu makro będzie nam wypełniać komórki w kolejnych wierszach.

Część 1. Wygląd formularza – coś na dobry początek
Część 2. Rozwijane listy – pola wyboru
Część 3. Autouzupełnianie pól z tabeli
Część 4. Generowanie numeru zamówienia
Część 5. Pierwsze makro
Część 6. Pobieranie nazw plików z katalogu

Dodaj komentarz