1
Visual Basic dla MS Word
i MS Excel
2
Język Visual Basic
• Kiedy używamy makr?:
– Trudne operacje (ktoś za nas rozwiązał
problem),
– Często wykonywane operacje.
• Spotyka się wersje języka VB dla:
– Microsoft Word (rzadko stosowane makra, bo
za bardzo indywidualna praca z tekstem),
– Microsoft Excel (częściej, bo struktury danych
są jednolite w całym arkuszu),
– Microsoft Access (do organizacji zarządzania
bazą danych).
3
Tworzenie makr
• Przechodzimy do
menu:
– NARZĘDZIA
• MAKRO
– ZAREJESTRUJ
NOWE MAKRO
4
Tworzenie makr - cd
• W okienku
pokazanym obok
możemy przypisać
makro do skrótu
klawiaturowego
lub do paska
narzędzi.
5
Tworzenie makr - cd
• Jeśli wybierzemy klawiaturę, to pojawia
się okno pokazane na rys. obok.
• W tym okienku możemy dostosować nasze
ustawienia
6
Tworzenie makr - cd
• Zatrzymanie rejestrowania jest
możliwe po kliknięciu przycisku
„Zatrzymaj rejestrowanie”
• Można w dowolnym momencie
wstrzymać rejestrowanie.
7
Zmiana ustawień makra
• Makro działa tylko w obrębie pliku w którym jest zapisane. Aby
makro było widoczne z każdego pliku w Wordzie należy zapisać
je w szablonie Normal.dot.
• Jednak należy unikać zmianami w tym pliku, jeśli już, to należy
zrobić kopię tego pliku.
• Przykładowe makro zmienia wszystkie parametry naszego
tekstu. Jeśli chcieli aby makro np. tylko pogrubiało i zmieniało na
kursywę bez zmiany wielkości liter. Wyobraźmy sobie dokument
z tekstem źródłowym który ma być zapisany kursywą pierwsza
część tego tekstu jest napisana Arialem a druga inną czcionką.
• Aby dokonać zmian przechodzimy do edytora VBA, który
umożliwia pełną kontrolę nad naszymi makrami. Aby się tam
dostać naciskamy Alt+[F11] lub w menu -narzędzia- wybieramy
-makro- edytor -Visual Basic-.
• Uruchomiona aplikacja jest częścią pakietu Office.
8
Zmiana ustawień makra
• Załóżmy, że chcemy aby teksty, z których
często korzystamy miały rozmiar 10
punktów oraz były pisane kursywą.
• W tym celu uruchamiamy rejestrowanie
makra. Następnie określmy parametry
czcionki menu -format- i -czcionka- teraz
zmieńmy wielkość a następnie, format
czcionki na kursywę. Teraz można już
przycisnąć przycisk Stop.
• Zostało utworzone makro, jego tekst jest
pokazany na następnym slajdzie.
9
Przykładowe makro
Sub Makro1()
' Makro1
' zmiana formatowania tekstu
With Selection
.Font .Name = "Times New
Roman"
.Size = 10
.Bold = False
.Italic = True
.Underline = wdUnderlineNone
.StrikeThrough = False
.DoubleStrikeThrough = False
.Shadow = False
.Hidden = False
.SmallCaps = False
.ColorIndex = wdAuto
.Superscript = False
.Subscript = False
.Spacing = 0
.Scaling = 100
.Position = 0
.Animation =
wdAnimationNone
End With
End Sub
10
Makropolecenia w Excel
• Makropolecenie to spis czynności do
wykonania w arkuszu Excela – mogą to być
wpisywane dane, wzory, formatowanie i inne
operacje. Tworzy się je, aby zautomatyzować
często wykonywane sekwencje operacji.
Makropolecenia zapisane są w języku Visual
Basic.
• Często, jeśli chcemy się dowiedzieć, jak brzmi
polecenie Visual Basic’a odpowiadające
operacjom na arkuszu, można stworzyć
proste makro i je obejrzeć.
11
Nagrywanie makra
• Podobnie jak dla Wrod’a
12
Oglądanie makra
• Aby obejrzeć i zmienić treść
makropolecenia należy wybrać z menu:
Narzędzia, Makro, Edytor Visual Basic
lub wcisnąć kombinację klawiszy Alt-F11
• W edytorze Visual Basica po lewej stronie
powinien znajdować się Explorator
Projektu, a po prawej obiekt, z którym w
danym momencie pracujemy, pokazuje to
rysunek na następnym slajdzie
13
Okno edytora makr
14
Przykład
• Pomiary ze stacji automatycznej zostały zapisane do
pliku tekstowego w formacie charakterystycznym dla
urządzenia pomiarowego. Po wczytaniu do Excela
dane nie są gotowe do analizy, gdyż i data i wartość
pomiaru znajdują się w tych samych komórkach.
• Należy więc, korzystając z możliwości, jakie daje
Visual Basic dla Excela, rozdzielić te dane do
osobnych komórek. Następnie dane zostaną
zanalizowane pod kątem przekroczenia wartości
dopuszczalnych. Wartość dopuszczalna będzie
podawana przez użytkownika. Dane o pomiarach,
które przekraczają podaną wartość będą przepisane
do osobnego arkusza, a na arkuszu wejściowym
zaznaczone kolorem.
15
Przykład- cd
• Przejść do Edytora Visual Basica (skorzystać
ze skrótu klawiaturowego Alt-F11 lub z menu:
Narzędzia/Makro/Edytor Visual Basic)
• Program będzie uruchamiany z formularza.
Utworzyć nowy formularz. Dodać przycisk
kończenia pracy z formularzem, a następnie
stworzyć przycisk o nazwie Przygotuj z
opisem: Przygotuj dane. Po dwukrotnym
kliknięciu w przycisk można przejść do
procedury obsługi zdarzenia: kliknięcie w
przycisk.
16
Przykład -cd
• Należy napisać procedurę, która oddzieli
datę od pomiaru (separatorem jest znak
gwiazdki), datę pozostawi w komórce,
pomiar wpisze do komórki obok.
• Aby podzielić tak zawartość komórki
trzeba, stosując funkcje operacji na
tekstach, podzielić tekst na dwie części:
od początku do gwiazdki i od gwiazdki
do końca.
17
Przykład - algorytm
Algorytm wygląda więc następująco:
• ustawić kursor w pierwszej komórce z danymi
(tu: A4)
• dopóki komórka nie jest pusta, powtarzaj:
– znaleźć nr pozycji, na której jest gwiazdka (jeśli brak
gwiazdki – wyświetlić komunikat)
– zapamiętać w zmiennej tekst od początku do
gwiazdki w formie daty
– zapamiętać w zmiennej tekst od gwiazdki do końca
tekstu w formie liczby
– datę zapisać w aktualnej komórce, liczbę zapisać w
komórce obok, po prawe stronie
– przejść do następnej komórki
• koniec pętli
18
Przykład - cd
• Z algorytmu wynika, że potrzebne są następujące
zmienne:
– nr (pozycji gwiazdki w tekście),
– data i wartość.
• Należy wykorzystać funkcje operujące na ciągach
znaków:
– mid(tekst, start, ile)
– len(tekst)
– instr(ciag_przeszukiwany, ciag_szukany) – funkcja ta zwraca
nr pozycji na której w ciągu przeszukiwanym znajduje się
poszukiwany ciąg znaków. Jeśli ciąg nie zostanie znaleziony,
funkcja zwraca wartość 0. Np. aby znaleźć miejsce, gdzie w
zmiennej dane znajduje się gwiazdka należy posłużyć się
instrukcją:
• dim gdzie as integer, dane as string
• dane=”jeden*dwa”
• gdzie=instr(dane,”*”)
19
Przykład - cd
• Procedura analizy danych wymaga
znajomości operacji Visual Basic’a dla Excela
dotyczących sterowania kursorem,
zaznaczania i odczytywania obszarów,
operowania na arkuszach itp.
• Oto krótki spis kilku takich operacji:
– wybór komórki o podanym adresie:
• Range(adres).Select
• lub Cells(nr_wiersza, nr_kolumny).Select
20
Przykład - cd
• wybór zakresu komórek o znanym adresie
–
Range(adres).Select, przy czym adres zakresu
zapisany w postaci
komórka_początkowa:komórka_końcowa, np.
wybór (podświetlenie) zakresu A6:D10 to
polecenie: Range(„A6:D10”).Select
–
lub Range(Cells(nr_wiersz_kom_pocz,
nr_kol_kom_pocz), Cells(nr_wiersz_kom_konc,
nr_kol_kom_konc))
• komórka, w której stoi kursor:
–
Activecell
• pobranie adresu zaznaczonego obszaru:
–
Selection.Address
21
Przykład - cd
• Można zadeklarować zmienną, do której można wpisać adres
obszaru wybranego przez użytkownika. Wykorzystując
odpowiednie funkcje można następnie poznać np. adres
początkowej komórki obszaru.
• liczba wierszy i kolumn w zaznaczonym obszarze:
– Selection.Rows.Count
– Selection.Columns.Count
• numer wiersza lub kolumny komórki aktywnej, zaznaczonego
obszaru, obszaru o podawanym adresie itp.
– Activecell.Row Activecell.Column
– Selection.Row Selection.Column
– Range(adres).Row
Range(adres).Column
• dodanie nowego arkusza
– Sheets.Add
• możliwe jest dodanie arkusza z jednoczesnym nadaniem mu
nazwy:
– Sheets.Add.Name=”xxxxxx”
22
Przykład - cd
• Arkusze, poza nazwami, mają tez swoje numery, po których
można się do nich odwoływać. Podanie w obiekcie Sheets w
nawiasach numeru oznacza odwołanie do arkusza o tym
numerze. Pierwszy arkusz istniejący w pliku ma numer 1.
• Przejście do arkusza o podanym numerze
– Sheets(numer).Select
• przejście do arkusza o podanej nazwie:
– Sheets(nazwa).Select
• oznaczenie aktywnego arkusza
– Activesheet
• pobranie (nadanie) nazwy arkuszowi
– np. Sheets(numer).name
– Activesheet.name
23
Przykład - cd
• nadanie nazwy “ABC” arkuszowi nr 2 jest
realizowane przez instrukcję:
– Sheets(2).Name=”ABC”
• sprawdzenie ile jest arkuszy (i jaki jest numer
ostatniego)
– Sheets.Count
• przeniesienie arkusza (przed lub za wskazany arkusz)
– Sheets(nr lub nazwa).Move Before := Sheets(nr lub nazwa)
– Sheets(nr lub nazwa).Move After := Sheets(nr lub nazwa)
• skasowanie akrusza
– Sheets(nr lub nazwa).Delete
24
Przykład - cd
• Aby zapisać powyższe polecenia skorzystamy z tzw. okna instrukcji
bezpośrednich. Okno to otwiera się (w edytorze Visual Basic) poleceniem
View/Immediate Window (Widok/Instrukcje bezpośrednie). Polecenia
wpisywane do tego okna wykonywane są natychmiast. Aby zobaczyć
wynik należy instrukcję poprzedzić znakiem zapytania. Np. aby wykonać
instrukcję podającą zawartość komórki D6 w oknie instrukcji
bezpośrednich należy wpisać:
– ? Range(„d6”).Fomula
• Przykładowo można wykonać następujące polecenia:
– dodać nowy arkusz, przenieść go na koniec arkuszy
– sprawdzić, jaki jest numer tego arkusza
– nadać mu nazwę „zadanie” (sprawdzić efekt na arkuszu)
– przenieść kursor do tego arkusza (sprawdzić efekt na arkuszu)
– wpisać instrukcję zaznaczającą obszar A3:D8 (sprawdzić efekt na arkuszu)
– przejść na arkusz, myszką zaznaczyć dowolny inny obszar, wrócić do Edytora
Visual Basic’a, sprawdzić, jaki jest adres zaznaczonego obszaru
– sprawdzić, ile jest wierszy w zaznaczonym obszarze
– usunąć arkusz „zadanie”
– Po wykonaniu zadań zamknąć okno instrukcji bezpośrednich.
25
Przykład -cd
• Następny krok to przygotowanie procedur
analizy danych. Wartość dopuszczalną
podaje użytkownik w odpowiednim polu na
formularzu.
• W tym celu należy dodać do formularza
etykietę o dowolnej nazwie; we właściwości
Caption wpisać Wartość dopuszczalna.
Obok umieścić pole tekstowe o nazwie prog.
Dodać przycisk o nazwie przekroczenia, z
opisem Analizuj dane. Na następnym
slajdzie przedstawiony jest przykładowy
formularz.
26
Przykład- cd
27
Przykład- cd
Podstawowe kroki w algorytmie to:
• jeśli nie jest wpisana wartość dopuszczalna –
wyświetlić komunikat, w przeciwnym
wypadku kontynuować;
• jeśli dane nie zostały przygotowane (np. jest
gwiazdka w komórce A4) – wyświetlić
komunikat, w przeciwnym wypadku
kontynuować;
– utworzyć nowy arkusz
– nadać mu nazwę przekroczenia
– przesunąć go za ostatni istniejący arkusz (jest to
operacja z jednej strony „kosmetyczna”, z drugiej
strony, w naszym przypadku dająca pewność, że
arkusz ze wszystkimi danymi ma numer jeden
28
Przykład - cd
– w komórce A1 nowego arkusza wpisać tekst: „Lista
pomiarów przekraczających wartość”; dołączyć do
wypisywanego ciągu znaków wartość dopuszczalną
wpisaną w polu na formularzu
– ustawić kursor w następnej komórce
– wrócić do pierwszego arkusza
– przechodzić kursorem po wszystkich komórkach z
danymi.
• jeśli wartość pomiaru jest większa niż wartość
dopuszczalna:zaznaczyć dane na amarantowo
(Activecell.Font.ColorIndex=7)
• przepisać dane do odpowiedniej komórki drugiego
arkusza
29
Przykład - treści
procedur
Private Sub przygotuj_Click()
Dim nr As Integer, dat As Date, war As Single
Range("a4").Select
Do While ActiveCell.Formula <> ""
nr = InStr(ActiveCell.Formula, "*")
if nr=0 then
MsgBox(„Błędna dana w komórce ”+Activecell.Address)
else
dat = CDate(Mid(ActiveCell.Formula, 1, nr - 1))
war = Val(Mid(ActiveCell.Formula, nr + 1,Len(ActiveCell.Formula)-nr))
ActiveCell.Formula = dat
ActiveCell.Offset(0, 1).Formula = war
endif
ActiveCell.Offset(1, 0).Select
Loop
End Sub
30
Przykład - treści
procedur
Private Sub przekroczenia_Click()
Dim adres_p As String, nazwa_arkusza As String, wart As Single, dat As Date
nazwa_arkusza = "przekroczenia"
If prog.Text = "" Then
MsgBox ("Wpisz wartość progową!")
Else
Sheets(1).Select
If InStr(Range("a4").Formula, "*") <> 0 Then
MsgBox ("Dane nie są przygotowane!")
Else
Sheets.Add.Name = nazwa_arkusza
ActiveSheet.Move after:=Worksheets(Worksheets.Count)
Range("a1").Formula="Lista pomiarów przekraczających wartość”+ prog
Range("a2").Select
adres_p = ActiveCell.Address
Sheets(1).Select
Range("a4").Select
31
Przykład - treści
procedur
Do While ActiveCell.Formula <> ""
wart = Val(ActiveCell.Offset(0, 1).Formula)
dat = CDate(ActiveCell.Formula)
If wart > Val(prog.Text) Then
ActiveCell.Font.ColorIndex = 7
ActiveCell.Offset(0, 1).Font.ColorIndex = 7
Sheets(nazwa_arkusza).Select
Range(adres_p).Formula = dat
Range(adres_p).Offset(0, 1).Formula = wart
adres_p = Range(adres_p).Offset(1, 0).Address
End If
Sheets(1).Select
ActiveCell.Offset(1, 0).Select
Loop
End If
End If
End Sub