Privacy Policy Cookie Policy Terms and Conditions Visual Basic for Applications - Wikipedia, wolna encyklopedia

Visual Basic for Applications

Z Wikipedii

Ten artykuł wymaga dopracowania.
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

  1. np. Visual Studio Tools for the Microsoft Office System

[edytuj] Linki zewnętrzne


Zalążek artykułu To jest tylko zalążek artykułu z dziedziny informatyki. Jeśli możesz, rozbuduj go.
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu