Visual Basic for Applications
Z Wikipedii
Więcej informacji co należy poprawić, być może znajdziesz w dyskusji tego artykułu lub na odpowiedniej stronie. W pracy nad artykułem należy korzystać z zaleceń edycyjnych. Po naprawieniu wszystkich błędów można usunąć tę wiadomość.
Możesz także przejrzeć pełną listę stron wymagających dopracowania.
Visual Basic for Applications (VBA) to oparty na Visual Basicu (VB) język programowania zaimplementowany w aplikacjach pakietu Microsoft Office oraz kilku innych, jak na przykład AutoCAD i WordPerfect. Ta uproszczona wersja Visual Basica służy przede wszystkim do automatyzacji pracy z dokumentami, na przykład poprzez makropolecenia.
Podstawową różnicą między VBA a VB jest to, że VBA nie pozwala na tworzenie samodzielnych skompilowanych aplikacji typu EXE. Kod programu napisanego w VBA zawsze zawarty jest w dokumencie utworzonym przy pomocy programu obsługującego VBA - na przykład w pliku *.DOC edytora MS Word lub pliku *.XLS arkusza MS Excel. Program taki wymaga zatem środowiska uruchomieniowego, którym jest zainstalowana na komputerze aplikacja obsługująca dany dokument.
Wyjątkiem symulującym samodzielnie działające aplikacje są pliki utworzone w programie Microsoft Access, które - przy zakupie rozszerzenia Microsoft Office Developer lub innego[1], pozwalają na uruchamianie plików Access'a na dowolnej ilości komputerów w tzw. Microsoft Access Runtime, bez konieczności wyposażania każdego pojedynczego komputera w pełny pakiet Microsoft Office.
Od wersji 2000 pakiet Microsoft Office został wyposażony w oddzielny Edytor Visual Basic, dobrze znany programistom Visual Basic 6.0, co znacznie ułatwia pracę z kodem. W wersji 2000 dodano także możliwość współpracy programu Microsoft Access z bazą danych Microsoft SQL Server w architekturze klient-serwer
Spis treści |
[edytuj] Przykłady programów
Przed rozpoczęciem pisania programu w Edytorze VBA (uruchamianym poprzez wciśnięcie ALT+F11), należy dodać dodatek Solver jako odwołanie do VBA (jeżeli będziemy z niego korzystali). W tym celu należy wybrać w Edytorze Tools-->References i zaznaczyć Solvera. Jeżeli go tam nie ma, to należy go odnaleźć w katalogu zawierającym Office poprzez guzik Browse.
Pisanie makra rozpoczynamy klikając prawym przyciskiem w dowolnym miejscu w oknie VBAProject (zwykle na górze po lewej stronie) i z menu wybierając Insert-->Module. Jest to o tyle ważne, że makra napisane nie w "Modules" tylko "Microsoft Excel Objects" nie będą działały. Po wstawieniu nowego modułu, po prawej stronie pojawia się puste pole edycji, w którym możemy zacząć pisać swój program. Poniżej znajduje się kilka przykładów, które powinny pomóc zrozumieć składnię VBA. Poniższe przykłady można skopiować i bezpośrednio wstawić do modułu. Makro uruchamia się poprzez kliknięcie na zielony znak Run (lub klawisz F5).
Przykładowy program napisany w VBA:
Sub proba() Dim i As Integer 'deklaracja zmiennej - nie jest wymagana w VBA For i = 1 To 10 'uruchomienie petli - 10 powtórzeń Cells(i, 1) = i ^ 2 'wypelnienie komórki wartością po prawej stronie znaku równa się Next i 'zwiększenie i o jeden End Sub 'zakończenie makra
Ten bardzo prosciutki programik wstawia do zakresu "A1:A10" kwadraty kolejnych liczb naturalnych (od 1 do 10)
Przy pomocy VBA można także deklarować funkcje użytkownika. Poniższy program wprowadzi funkcję, która jako argument przyjmuje liczbę naturalną (n), a zwraca sumę ciągu arytmetycznego, gdzie pierwszy wyraz to 1, ostatni to n, a różnica ciągu to 1.
Function aryt(n As Integer) As Integer Dim i, wartosc As Integer 'deklaracja zmiennych wartosc = 0 'przypisanie wartości zero zmiennej wartosc For i = 1 To n 'uruchomienie pętli wartosc = wartosc + i 'zwiększenie zmiennej wartosc o i Next i 'zwiększenie i o jeden aryt = wartosc 'przypisanie zmiennej wyjściowej wartości zawartej w zmiennej wartość End Function
Poniżej znajduje się bardziej skomplikowany program, którego celem jest pokazanie jak:
-
- wpisywać formuły (a nie wartości) do arkusza przy pomocy VBA
- dokonywać operacji na kolumnach (np. zmiana szerokości)
- uruchomić Tabelę Danych z poziomu VBA
- wstawić wykres
- uruchomić Solvera z poziomu VBA
- jakie słabości ma Solver
Pierwsza część programu tworzy funkcję celu (sinusoida z trendem wzrostowym) oraz warunek ograniczający w postaci ujemnie nachylonej prostej (dopuszczalne rozwiązania znajdą się pod prostą). Następnie będę chciał przedstawić na wykresie funkcję celu i warunek ograniczający. W tym celu zbuduję Tabelę Danych i na jej podstawie narysuję wykres. Na koniec rozwiążę zadanie maksymalizacji funkcji celu przy zadanym warunku ograniczającym. Okaże się, że Solver znajduje maksimum w punkcie x=2,094 (f=1,91). Z wykresu wynika jednak, że jest to maksimum lokalne. Dlatego żeby znaleźć maksimum globalne trzeba rozpocząć poszukiwanie od np. x=5. Wtedy okaże się, że maksimum funkcji jest w x=7,54 (f=4,72). VBA może być więc przydatne w poszukiwaniu maksimów globalnych, ponieważ można wprowadzić np. pętlę, która będzie rozwiązywała zadanie optymalizacji wiele razy, startując z różnych punktów.
Sub skomplikowany_program() 'stworzenie funkcji celu i wzoru na prostą ograniczającą Range("b1") = "cel" Range("b2").Formula = "=sin(" & Cells(2, 3).Address & ")+ 1/2*" & Cells(2, 3).Address Range("c1") = "x=" Range("a4") = "prosta" Range("b4").Formula = "=-0.7*" & Cells(2, 3).Address & "+10" 'stworzenie formuły, która będzie wykorzystywana przez Solvera jak warunek ograniczający Range("a6") = "warunek" Range("b5").Formula = "=" & Range("b2").Address & "-" & Range("b4").Address Range("c5") = "<" Range("d5") = 0 'stworzenie "pierwszej" kolumny Tabeli Danych (a więc x=0, x=0.2, x=0.4 ... x=10) Cells(10, 1) = 0 For i = 1 To 50 Cells(i + 10, 1) = Cells(i + 9, 1) + 0.2 Next i 'zmiana szerokości kolumny Columns(2).ColumnWidth = 12 'dodanie tekstu i formuły w nagłówku "drugiej" kolumny Tabeli Danych Range("b8") = "funckja celu" Range("b9").Formula = "=" & Range("b2").Address 'dodanie tekstu i formuły w nagłówku "trzeciej" kolumny Tabeli Danych Range("c8") = "prosta" Range("c9").Formula = "=" & Range("b4").Address 'stworzenie Tabeli Danych na podstawie 3 kolumn Range(Cells(9, 1), Cells(60, 3)).Table columninput:=Range("c2") 'stworzenie wykresu na podstawie Tabeli Danych Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("Arkusz1").Range("A10:C60"), PlotBy _ :=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Arkusz1" ActiveChart.SeriesCollection(2).Select 'wprowadzenie zadania optymalizacji do Solvera - maksymalizacja B2 poprzez zmianę C2 solverreset solverok setcell:=Range("b2"), maxminval:=1, bychange:=Range("c2") 'dodanie warunku ograniczającego - B5 to lewa strona, 1 to znak <=, D5 to prawa strona solveradd cellref:=Range("b5"), relation:=1, formulatext:=Range("d5") solversolve userfinish:=True End Sub
[edytuj] Zobacz też
[edytuj] Referencje
[edytuj] Linki zewnętrzne
To jest tylko zalążek artykułu związanego z oprogramowaniem komputerowym i językami programowania. Jeśli możesz, rozbuduj go.