VBA Podstawy Cz1 - Student

Transkrypt

VBA Podstawy Cz1 - Student
VBA-podstawycz.1
1. Uwagi historyczne
Nazwa BASIC pochodzi od słów "Beginner’s All-purposes Symbolic Instruction", oznacza nazwę
języka programowania, który powstał na początku lat 60-tych. Pierwotnie był to język
interpretowany. Visual Basic for Windows powstał w 1991 r.
Nazwa VBA jest skrótem od słów "Visual Basic for Applications" i oznacza język skryptowy do
pisania aplikacji. Pierwsza wersja VBA pojawiła się wraz z Excel 5. VBA jest językiem obiektowym,
nawiązującym do wymagań stawianym tego typu językom. Jego poprzednikiem jest XLM.
VBA jest wersją języka Visual Basic wchodzącą min. w skład Microsoft Excel. Zarówno VBA jak i
samodzielna wersja języka Visual Basic korzystają z identycznej składni, tych samych narzędzi
pomocniczych i takiego samego edytora.
We współpracy arkusza z VBA, arkusz udostępnia swoje możliwości za pomocą biblioteki
obiektów. Do tworzenia aplikacji VBA, zwanych makrami, można użyć nie tylko VBA dla Excela,
Worda czy Accessa, ale także samodzielnej wersji VB. Istnieje możliwość wsparcia aplikacji pisanych
w VBA (makr) za pomocą innych języków, np. C++.
Począwszy od wersji Office 2010 skoroszyty Excel wsparte makrami VB mają rozszerzenie .xlsm
2. Obiekty VBA
Excel udostępnia ponad 100 klas obiektów. Ważniejsze z nich, to:
obiekt
obiekt
Application
Workbook
Workbooks
obiekt WorkSheet
WorkSheets
ActiveSheet
obiekt Range
Selection
Cells
ActiveCell
obiekt CommandBar
CommandBars
obiekt Chart
obiekt PivotTable
...........
– reprezentuje Excel
– reprezentuje skoroszyt
– reprezentuje kolekcję skoroszytów
– reprezentuje arkusz
– reprezentuje kolekcję arkuszy
– reprezentuje arkusz aktywny
– reprezentuje zakres komórek lub komórkę pojedynczą
– reprezentuje aktywny obszar arkusza
– reprezentuje komórkę (nie ma obiektu Cell)
– reprezentuje komórkę aktywną arkusza
– reprezentuje pasek narzędzi
– reprezentuje wszystkie obiekty CommandBar
– reprezentuje wykres
– reprezentuje tabelę przestawną
Obiekty tworzą pewną hierarchię, tj. składowymi obiektów nadrzędnych są obiekty podrzędne.
Poza obiektami składowymi obiekty mają swoje metody i właściwości. Niektóre obiekty (np.
Range, Cells) występują w roli właściwości. I tak:
Właściwościami obiektu klasy Range są Value, Name
Właściwość Offset obiektu klasy Range, zwraca przesunięty względem niego obiekt Range
Metodą obiektu klasy Range jest ClearContents
Właściwościami obiektu Chart są HasTitle i Type
W odwołaniach do składowych obiektu używamy operatora "."
Na przykład, wyrażenie
Application.Workbooks ("Zeszyt1.xls") _
.WorkSheets("Arkusz1").Range("A1")
oznacza odwołanie do komórki A1 arkusza "Arkusz1" w skoroszycie "Zeszyt1.xls".
Jeżeli "Arkusz1" jest arkuszem aktywnym, odwołanie to można skrócić do
Range("A1")
Podobnie odwołujemy się do metod i właściwości:
Range("A1").Value
odwołanie do właściwości Value komórki A1
Range("A1").ClearContents
Range("A1").Select
wywołanie metody ClearContents czyszczenia, tutaj
komórki A1
Metoda Select czyni A1 komórką aktywną (ActiveCell)
W Excelu każdy skoroszyt jest projektem! Projekt można traktować jako kolekcję obiektów
składowych. Najważniejsze z nich, to:
Microsoft Excel Objects - pojemnik wszystkich arkuszy i wykresów skoroszytu
ThisWorkBook
- reprezentuje obiekt ActiveWorkBook
Modules
- reprezentuje wszystkie istniejące moduły makr
Forms
- zawiera obiekty UserForm, tj. formularze użytkownika.
Każdy element projektu ma okno kodu do przechowywania własnego modułu VBA. Nad
modułami możesz wykonywać operacje wstawiania, usuwania, eksportowania i importowania:
polecenie
polecenie
polecenie
polecenie
Insert⇒Module
File⇒Remove xxx
File⇒ Export File
File⇒ Import File
- dodaje w zaznaczonym projekcje nowy moduł,
- usuwa zaznaczony moduł xxx
- eksportuje zaznaczony obiekt
- importuje do zaznaczonego projektu
Kod modułu VBA (Procedury Sub, Function i Property oraz Deklaracje) możesz wprowadzić na
trzy sposoby:
-
użyć edytora VBE i wpisać kod ręcznie, klucz <Alt + F11>,
zarejestrować ciąg czynności nad arkuszem, jako makro za pomocą rejestratora makr, (co
zawsze daje procedurę Sub znacznie uproszczoną strukturalnie),
skopiować z innego modułu.
3. Praca z makrami
Kilka przydatnych kluczy:
<Alt + F8> - otwieranie makr VBA
<Alt + F11> - otwieranie edytora VBA
<F5> - wykonywanie makra
<F8> - wykonywanie makra krok po kroku
Zestaw dwóch znaków: spacji i znaku podkreślenia ( _) to znak kontynuacji wiersza
Makra występują pod postacią procedur lub funkcji VBA:
Procedura VBA:
Sub nazwa()
…
End Sub
Funkcja VBA:
Function nazwaFunkcji(var As Integer) As Integer
…
nazwaFunkcji = 5
End Function
Wiersz otwarcia procedury/funkcji może mieć wiele argumentów , np.:
Sub nazwaProcedury(arg1 As Typ1,…, argN As TypN)
…
End Sub
Podanie zmiennej, jako argumentu w linii otwarcia procedury jest równoznaczne z jej
zadeklarowaniem, jako zmiennej lokalnej w danej procedurze
Jeżeli jakaś zmienna zostaje przekazana w formie argumentu do wywoływanej procedury i tam
zostanie zmieniona, to po powrocie do bazowej procedury/funkcji też będzie zmieniona!
Do wywoływania procedury/funkcji możemy użyć słowa kluczowego Call. Gdy procedura nie
posiada żadnych argumentów wejściowych piszemy:
Call wywolywanaProcedura
wywolywanaProcedura
' OK!
' OK!
Gdy procedura posiada argumenty i stosujesz Call to używaj nawiasów:
Call odliczaniePodatku(pensja, stawka) ' OK!
odliczaniePodatku pensja, stawka
' OK!
Aby sprawdzić aktualną wartość zmiennych w procedurze możesz ustawiać tzw. punkty
zatrzymania (toogle breakpoints). Procedura zawsze zawiesza swoje działanie w miejscu, w którym
ustawiony jest taki punkt.
Punktów zatrzymania nie można ustawiać w pustych wierszach oraz w wierszach, w których
znajduje się tylko deklaracja zmiennych.
Słowo kluczowe Optional
Zdarzają się sytuacje, kiedy funkcja lub procedura wymaga podania argumentu tylko w niektórych
sytuacjach, podczas gdy w innych argument ten nie jest konieczny.
Przykład funkcji z argumentem wymaganym i argumentem opcjonalnym:
Function pensjaNetto(podstawa As Long, _
Optional kwotaWolnaOdPodatku As Single = 0) As Long
Dim kwotaDoOpodatkowania As Single
kwotaDoOpodatkowania = podstawa - kwotaWolnaOdPodatku
pensjaNetto = podstawa - (kwotaDoOpodatkowania * 0.18)
End Function
Argumenty opcjonalne mogą mieć wskazaną wartość domyślną (tutaj 0). Argument domyślny nie
może poprzedzać argumentu wymaganego. W odwołaniach do procedur/funkcji z argumentami
domyślnymi argumenty te mogą być pomijane.
Publiczne funkcje użytkownika można wybierać i uruchamiać tak, jak funkcje arkuszowe!
W nagłówkach modułów zawierających makra spotyka się opcje
Option Explicite
Option Base 1
- deklaruj wszystkie zmienne
- indeksuj tablice od 1 (od jedynki, nie od 0)
4. Komunikacja z użytkownikiem
Procedury i funkcje mogą zwracać się do użytkownika po potrzebne dane za pomocą funkcji
InputBox i przekazywać mu komunikaty za pomocą funkcji MsgBox
InputBox
Funkcja InputBox służy do wprowadzania danych. Przykładowa procedura wprowadzania daty
może wyglądać następująco:
Sub WprowadzanieDaty()
Dim Data As String
Data = InputBox("Wprowadź miesiąc w formacie MMM-RRRR")
MsgBox "OK., kontynuacja"
End Sub
Gdy napisane makro uruchomimy najpierw pojawi się zaproszenie do podania daty. Możesz wtedy
wpisać np. "sty-2005" i potwierdzić przyciskiem OK. Zaraz pojawi się kolejny komunikat: "OK.,
kontynuacja" i to niezależnie od tego, czy datę wprowadzono poprawnie czy też nie. Stosunkowo
łatwo zabezpieczyć się przed wprowadzaniem daty pustej, co zrobimy w sposób następujący:
Sub WprowadzanieDaty()
Dim Data As String
Data = InputBox("Wprowadź miesiąc w formacie MMM-RRRR")
If Data <> "" Then
MsgBox "OK., kontynuacja"
End If
End Sub
Dokładniejsze sprawdzenie daty umożliwia funkcja IsDate. Kolejna modyfikacja naszej
procedury z wykorzystaniem tej funkcji może wyglądać następująco:
Sub WprowadzanieDaty()
Dim Data As String
Data = InputBox("Wprowadź miesiąc w formacie MMM-RRRR")
If IsDate(Data) Then
MsgBox "OK., kontynuacja"
Else
MsgBox "Niepoprawna data"
End If
End Sub
Przetestuj tak zdefiniowane makro. Gdybyś chciał w jakiejś aktywnej komórce wyświetlać
(poprawną bądź niepoprawną) datę dodaj za If lub Else instrukcję
ActiveCell.Formula = Data
Dojdziesz do wniosku, że VB potrafi rozpoznać kilka formatów dat i że nie ma tu pełnej
zgodności z polskimi nazwami funkcji arkuszowych (VB posługuje się tylko językiem angielskim!)
MsgBox
Funkcję MsgBox można tak skonfigurować, że można będzie zadawać pytania i odpowiadać na
nie słowami "Tak" lub "Nie" korzystając z jej argumentów.
• Pierwszy argument Prompt jest argumentem wymaganym i zawiera tekst komunikatu, który
ma być wyświetlany.
• Drugi argument Buttons - pozwala poprzez wybór stałych dobrać tak ilość, jak i znaczenie
przycisków sterujących.
• Trzeci argument Title może zawierać tytuł okna komunikatów MsgBox().
• Do wykorzystania są jeszcze dwa inne argumenty tej funkcji.
Kolejna wersja procedury WprowadzanieDaty()wykorzysta dwa pierwsze argumenty i
pomocniczą zmienną Odp typu VbMsgBoxResult:
Sub WprowadzanieDaty()
Dim Data As String
Dim Odp As VbMsgBoxResult
Data = InputBox("Wprowadź miesiąc w formacie MMM-RRRR")
If IsDate(Data) Then
MsgBox "OK., kontynuacja"
Else
Odp=MsgBox("Niepoprawna data, kontynuować?", _
vbYesNo)
If Odp = vbNo Then Exit Sub
End If
End Sub
Uwaga. W przypadku, gdy zmiennej przypisuje się wartość zwracaną przez funkcję, wszystkie
argumenty funkcji winny znaleźć się w nawiasach. Jeżeli nie wykorzystujemy zwracanych wartości,
nawiasów nie należy używać.
5. Przykłady
Przykład 1 – kod modułu, który wyświetla nazwę użytkownika
Sub Witaj()
'
wyświetla nazwę uŜytkownika
Msg = "czy nazywasz się " & _
Application.UserName & " ?"
Odp = MsgBox(Msg, vbYesNo)
If Odp = vbNo Then
MsgBox " szkoda, Ŝe się nie zgadza "
Else
MsgBox " cieszę się, Ŝe się zgadza "
End If
End Sub
Przykład 2 – kod modułu, który wyświetla nazwy dwóch kolejnych plików znajdujących się w folderze
aktywnym
Sub DwaPierwszeNaLiscie()
Dim Wiersz As Integer
Dim Plik
As String
Wiersz = 1
Plik
= Dir("*.xls")
' pierwsze uŜycie funkcji Dir
Cells(Wiersz, 1) = Plik
Wiersz = 2
Plik
= Dir
' drugie uŜycie Dir!
Cells(Wiersz, 1) = Plik
End Sub
6. Załączniki
Strona internetowa
http://www.mielk.pl/pl/kursy/kursy.php
W załączeniu jest też skoroszyt pod nazwą
VBA_wybraneMakra_.xlsm
gdzie zestawiono i pokrótce skomentowano wybrane makra ze wskazanej strony internetowej.
H.P.