1 / 14

Programowanie w VBA

Programowanie w VBA. Rodzaje plików. Obsługa pliku sekwencyjnego. Dodatkowe funkcje tekstowe. Przypomnienie: Left, Right, Mid, Trim, RTrim, LTrim, Len; InStr: InStr (<start>, <tekst>, <wzorzec>)

draco
Download Presentation

Programowanie w VBA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programowaniew VBA Rodzaje plików. Obsługa pliku sekwencyjnego.

  2. Dodatkowe funkcje tekstowe • Przypomnienie: Left, Right, Mid, Trim, RTrim, LTrim, Len; • InStr: InStr (<start>, <tekst>, <wzorzec>) <wzorzec> i <tekst> mogą być zmiennymi tekstowymi, łańcuchami danych, w szczególności jednym znakiem; funkcja InStr zwraca numer znaku od którego w <tekst> pojawia się po raz pierwszy <wzorzec>; <start> ustala od którego znaku <tekst> zaczyna szukać. Aby zagnieździć funkcję InStr w ramach funkcji tnących tekst, należy pamiętać o odjęciu jedynki od wyniku!

  3. Plik sekwencyjny i swobodny Plik sekwencyjny to plik zapisywany liniami o dowolnej zawartości, chociaż w przypadku danych linie powinny zawierać stałą liczbę pól; Odczytywany po linii (tryb Input), zapisywany po linii na końcu pliku (tryb Append), albo kasujący zawartość dotychczasową, o ile takowa istniała (tryb Output); Plik o zapisie swobodnym to plik zawierający następujące po sobie bezpośrednio rekordy, przy czym każdy rekord zawiera stałą liczbę tych samych pól zawierających zawsze taki sam typ danych (ale nie Variant, a String musi mieć ustaloną długość);

  4. Dostęp do pliku sekwencyjnego • Podanie ścieżki jako łańcucha znaków (w formie adresu na dysku, np.: ”C:\Folder\Folder2\plik.txt”) • Uproszczeniem jest użycie metody Application.GetOpenFilename lub Application.GetSaveAsFilename otwierające okienko dialogowe z folderami i ich zawartością oraz przechwytujące ścieżkę wybranego pliku do zmiennej, np.: • sciezka = Application.GetOpenFilename • Obie metody mogą używać filtrów zawężających krąg poszukiwanych plików (z góry nadany przez programistę – wówczas filtry podajemy w nawiasach za metodą);

  5. Zapis i Odczyt • Zapis i odczyt następuje linijkami, komendami Line Input, Input, Print, Write; • Zapis Print jest do dowolnych tekstów, Line Input do odczytu dowolnych (potencjalnie) tekstów; • Zapis Write służy do zapisu danych w stałym formacie (pola), Input do odczytu takich danych (czyta ustalonymi polami, używa parsera); • Pętla czytająca plik musi zawierać limit w postaci rozpoznania końca pliku. • Koniec pliku jest osobnym znakiem, nr 26 (w tabeli ASCII), ale nie trzeba go bezpośrednio czytać, ponieważ w momencie, gdy komendy czytające plik natknął się na niego, funkcja EOF(<nr pliku>) jest ustawiana jako prawdziwa (EOF – End Of File);

  6. Otwarcie pliku Open <ścieżka> For Input As #1 (numerów może być więcej, jeśli czytamy więcej plików naraz) • <ścieżka> to typ String – w cudzysłowach bezpośrednio, albo zmienna typu String gdzie indziej ustalona, albo: Dim sciezka As Variant sciezka = Application.GetOpenFilename(„TextFiles (*.txt), *.txt”) • funkcja GetOpenFilename uruchamia okienko wyboru pliku do odczytu i zwraca ścieżkę zaznaczonego pliku; • Line Input #1, <string> zwraca do zmiennej <string> linijkę z pliku #1; • EOF(1) – zwraca prawdę gdy skończy się plik;

  7. Przykład Sub przyklad() Dim sciezka As Variant Dim linia_pliku As String Dim n As Integer n = 1 sciezka = Application.GetOpenFilename("Text Files (*.txt), *.txt") If sciezka <> False Then Open sciezka For Input As #1 While Not EOF(1) Line Input #1, linia_pliku Cells(n, 1).Value = linia_pliku n = n + 1 Wend Close #1 End If End Sub

  8. Zapis do pliku Open <sciezka> for Output As #1 • (numer może być inny, <sciezka> to String wzięty na przyklad z funkcji Application.GetSaveAsFilename(); Dim sciezka As Variant sciezka = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") • funkcja GetSaveAsFilename uruchamia okienko wyboru pliku do odczytu i zwraca ścieżkę zaznaczonego pliku; • Print #1, <String> wpisuje zmienną <String> lub dowolny tekst w cudzysłowach jako kolejną linijkę do pliku #1;

  9. Przykład Sub abc() Dim sciezka As Variant Dim linia_pliku As String Dim n As Integer n = 1 sciezka = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") If sciezka <> False Then Open sciezka For Output As #1 While Cells(n, 1).Value <> "" linia_pliku = Cells(n, 1).Value Print #1, linia_pliku n = n + 1 Wend Close #1 Endif End Sub

  10. Przykład • W pliku zaj09.xls zamieszczono program Przyklad wykorzystujący czytanie i zapisywanie pliku (tymczasowym miejscem przechowywania danych jest ListBox1 z zadania 1, a więc najpierw trzeba wykonać zadanie 1);

  11. A co z bazą danych? • Jeśli mamy dane w formie CSV (ang. Comma Separated Values = pol. Dane rozdzielone przecinkami), czyli w jednej linijce mamy wiele różnych rodzajów danych, ale każda linijka ma stały skład, przykładowo: symbol, nazwa, masa pierwiastka Cu,miedź,64 • Wówczas musimy pobierając dane użyć rozdzielania. Możemy napisać do tego oczywiście skomplikowaną funkcję operującą na łańcuchach znaków, ale najczęściej można skorzystać z gotowych narzędzi VBA, tzw. parsera – tu rozdzielającego dane automatycznie, np.: (przepisywanie do drugiego pliku tylko środkowej kolumny źródła): Input #1, symbol, nazwa, masa Write #2, nazwa

  12. Obsługa pliku • Plan działania: Podanie ścieżki dostępu do pliku; Otwarcie pliku; Operacje na pliku; Zamknięcie pliku;

  13. Zadanie 1 • Stworzyć formularz obsługujący bazę danych (uwaga, rozszerzenie .csv, a nie .txt) składającą się z trzech kolumn (symbol pierwiastka, jego nazwa i masa); • Formularz wczytuje do ListBoxa kolejno symbole, nazwy lub masy zależnie od tego, co zostało wybrane w OptionButtonach;

  14. Zadanie 2 • Zmodyfikować program z zadania 1, wzbogacając go o grupę pól opcji (litowce, berylowce, fluorowce, lantanowce, aktynowce, wszystko) a następnie wypisujący wybrany rodzaj danych tylko dla wybranej grupy pierwiastków; • Dodać klawisz, który w wyniku przyciśnięcia uruchomi okno dialogowe zapisu pełnego kompletu danych dla aktualnie wybranej grupy pierwiastków do pliku o podanej przez użytkownika nazwie.

More Related