INSTRUKCJA SKOKU GOTO



Podobne dokumenty
LibreOffice Calc VBA

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wprowadzenie do programowania w VBA

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Visual Basic for Applications. Wstęp

Instrukcje cykliczne (pętle) WHILE...END WHILE

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Materiały do laboratorium MS ACCESS BASIC

Algorytmika i Programowanie VBA 1 - podstawy

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

Podstawy Programowania C++

VBA-podstawy cz. 1. Począwszy od wersji Office 2010 skoroszyty Excel wsparte makrami VB mają rozszerzenie.xlsm

Technologie informacyjne: Excel i VBA

Automatyzacja pracy w AutoCAD

Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK.

Właściwości i metody obiektu Comment Właściwości

Pętle instrukcje powtórzeo

4.1. Analiza AWN jest dokonywana na poziomie VBA

Tablice. Jones Stygar na tropie zmiennych

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

Arkusze kalkulacyjne i VBA

Technologia informacyjna programowanie Janusz Uriasz

Do obiektów nie odwołujemy się bezpośrednio, tylko przez ich atrybuty i metody. Obiekt.identyfikator[.identyfikator]

Maxima i Visual Basic w Excelu

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

Visual Basic dla Aplikacji

Tablice, DataGridView

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Procedury i funkcje. Programowanie komputerowe

Visual Basic dla AutoCAD

1 Podstawy c++ w pigułce.

Ten odcinek Akademii PC Kuriera poświęcony zostanie tworzeniu i wykorzystaniu funkcji i procedur w języku Visual Basic.NET.

Aplikacje w środowisku VBA. Visual Basic for Aplications

Zakres tematyczny dotyczący podstaw programowania Microsoft Office Excel za pomocą VBA

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

PROGRAMOWANIE MAKR W PROGRAMIE EXCEL W JĘZYKU VISUAL BASIC

Arkusze kalkulacyjne i VBA

MsgBox(Komunikat [, Przyciski] [, Tytuł] [, PlikHelp, HelpContext])

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY.

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

PROGRAMOWANIE MAKR W PROGRAMIE EXCEL W JĘZYKU VISUAL BASIC

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Visual Basic for Application (VBA)

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Program szkolenia PODSTAWY VBA (VISUAL BASIC FOR APPLICATIONS) I FORMULARZE.

AUTOMATYZACJA PRACY Z UŻYCIEM MAKR. Tom XII NPV WSP.KORELACJI ROZKŁ.EXP JEŻELI COS KOMÓRKA VBA DNI.ROBOCZE ILOCZYN LOG SUMA CZY.

Kiedy i czy konieczne?

Przedmiot: Informatyka w inżynierii produkcji Forma: Laboratorium Temat: Zadanie 5. MessageBox, InputBox, instrukcja Select Case i instrukcje pętli.

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 3. Programowanie komputerowe

Visual Basic for Application (VBA)

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Losowe wyszukiwanie rozwiązań (VBA)

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Makra VBA w Excelu dla początkujących

2.1 Funkcje - na przykładzie wyceny europejskiej

Metody Metody, parametry, zwracanie wartości

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy informatyki

1 Podstawy c++ w pigułce.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Visual Basic for Application (VBA)

Programowanie obiektowe

VBA 1 VBA TYPY PROCEDUR (PODPROGRAM, FUNKCJA) ZMIENNE, DEKLARACJA ZMIENNYCH FUNKCJA MsgBox

PROGRAMOWANIE OBIEKTOWE: VISUAL BASIC VISUAL BASIC FOR APPLICATION (VBA) NA PRZYKŁADZIE EXCELA

COMARCH IT AKADEMIA. Programista VBA w Microsoft Excel (microbootcamp)

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Visual Basic w programie Excel

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Programowanie. Projektowanie funkcje programu tworzenie algorytmu i struktur danych. Programowanie implementacja algorytmu kompilacja programu

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

01 grid tablica grid. Copyright 2017, mgr inż. Janusz Bonarowski 1

Języki skryptowe w programie Plans

Bazy Danych. Wykład VII Makropolecenia. Copyright by Arkadiusz Rzucidło 1

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

DataGridView. Aby dodawać kolumny wybieramy z listy zadań Add Column..., co wywoła okno dodawania kolumn, rys. 2. Rysunek 1

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Programowanie 3 - Funkcje, pliki i klasy

Visual Basic: Tablice, sortowanie, r. ak. 2014/2015

VBA praca z makrami w Excelu: piszemy kod! Ulepszamy program! 0. Parę uwag o samym edytorze

Technologie informacyjne

Programowanie w Visual Basic. Programowanie w Visual Basic 1

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

Część 4 życie programu

Matlab Składnia + podstawy programowania

3. Podstawy programowania w MS EXCEL

Excel. Tworzenie zaawansowanych aplikacji.

PODSTAWY VBA Rinat Szepe ( )

Palindromy. Przykładowe rozwiązanie

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Podstawy Programowania Podstawowa składnia języka C++

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Wstęp do programowania

Transkrypt:

Opracowała Joanna Kisielińska 1 Składnia instrukcji GoTo GoTo etykieta INSTRUKCJA SKOKU GOTO etykieta musi zostać umieszczone w programie: etykieta: Instrukcja lub etykieta: Instrukcja Przykład Sub ocena() Dim odp As String, i As Integer, c As Integer Start: i = 0 kom = "Najdłuższą rzeką świata jest?" & vbcrlf & "a - Amazonka" & vbcrlf kom = kom & "b - Nil" & vbcrlf & "c - Kongo" odp = InputBox(kom) Select Case odp Case "a", "A": MsgBox "źle" i = 1 Case "b", "B": MsgBox "dobrze" Case "c", "C": MsgBox "źle" i = 1 Case Else: MsgBox "zła litera" i = 1 End Select If i = 1 Then c = MsgBox("czy próbujesz jeszcze raz", vbyesno) If c = vbyes Then GoTo Start End If

Opracowała Joanna Kisielińska 2 Składnia pętli For PĘTLA FOR For licznik = początek To koniec [Step krok] [instrukcje] [Exit For] [instrukcje] Next [licznik] gdzie: licznik zmienna sterująca pętli, musi być zmienną liczbową (zalecane całkowite) początek wartość początkowa licznika koniec wartość końcowa licznika krok wartość kroku instrukcje jedna lub więcej instrukcji, które zostaną wykonane, w każdym kroku pętli Step jeśli nie występuje krok jest równy 1 Exit For instrukcja ta może wystąpić raz lub kilka razy, powoduje bezwarunkowe opuszczenie pętli Next licznik powiększany jest o krok (lub o 1) Wykonanie pętli For 1) licznik = początek 2) dla krok >= 0 jeżeli licznik <= koniec idź do punku 3 w przeciwnym wypadku koniec pętli dla krok < 0 jeżeli licznik >= koniec idź do punku 3 w przeciwnym wypadku koniec pętli 3) wykonaj instrukcje, jeśli napotkasz Exit For wyjdź bezwarunkowo z pętli 4) licznik = licznik + krok, idź do punktu 2 Przykłady Sprawdzić, gdzie sprawdzany jest warunek: Sub num() Dim z As Integer For z = 0 To -2 MsgBox z Next z Warunek sprawdzany jest na początku, na ekranie nie pojawi się żaden komunikat.

Opracowała Joanna Kisielińska 3 Wypełnianie kolejnych komórek arkusza Sub num() Dim z As Integer For z = 0 To 5 ActiveSheet.Range("a1").Offset(z, 0).Value = z Next z MsgBox z Sub num() Dim z As Integer For z = 5 To 0 Step -1 ActiveSheet.Range("a1").Offset(z, 0).Value = z Next z MsgBox z Sub num() Dim z As Integer Dim z As Integer For z = 0 To 100 B = ActiveSheet.Range("a1").Offset(z, 0).Value If B = "koniec" Then Exit For ActiveSheet.Range("a1").Offset(z, 1).Value = B + 1 Next z MsgBox z

Opracowała Joanna Kisielińska 4 Sub wypelnienie() x = 1 lw = InputBox("liczba wierszy") lk = InputBox("liczba kolumn") la = InputBox("liczba arkuszy") For i = 1 To la For j = 0 To lw - 1 For k = 0 To lk - 1 ActiveWorkbook.Worksheets(i).Range("a1").Offset(j, k).value = x x = x + 1 Next k Next j Next i MsgBox "zrobione" Sumuje liczby w wierszach i oblicza sumę całkowitą Sub suma_liczb() Dim l As Integer, x As Integer, s As Integer x = 0 lw = 5 'liczba wierszy lk = 4 'liczba kolumn 'wypełnienie tabeli danymi Randomize For j = 0 To lw - 1 For k = 0 To lk - 1 l = Rnd * 100 + 1 ActiveSheet.Range("a1").Offset(j, k).value = l Next k Next j 'obliczanie sum s = 0 For j = 0 To lw - 1 x = 0 For k = 0 To lk - 1 x = x + ActiveSheet.Range("a1").Offset(j, k).value Next k ActiveSheet.Range("a1").Offset(j, lk).value = x s = s + x Next j MsgBox ("suma całkowita" & s)

Opracowała Joanna Kisielińska 5 Składnia pętli warukowych PĘTLE WARUNKOWE Do [While warunek1 Until warunek2] [instrukcje] Loop [While warunek3 Until warunek4] gdzie: waruneki warunki logiczne instrukcje jedna lub więcej instrukcji, które zostaną wykonane, w każdym kroku pętli Postacie pętli warunkowych Warunek jest sprawdzany na początku pętli Pętla wykonuje się dopóki warunek jest prawdziwy Pętla wykonuje się aż warunek stanie się prawdziwy Do While warunek [instrukcje] Loop Do Until warunek [instrukcje] Loop Warunek jest sprawdzany na końcu pętli Do [instrukcje] Loop While warunek Do [instrukcje] Loop Until warunek Uwaga: Pętle, w których warunek jest sprawdzany na końcu przynajmniej raz wykonują instrukcje w nich zapisane. Pętle, w których warunek jest sprawdzany na początku mogą ani razu nie wykonać instrukcji w nich zapisanych. W tym sensie pętle nie są sobie równoważne.

Opracowała Joanna Kisielińska 6 Wykonanie pętli Do While... Loop 1) sprawdź, czy warunek jest prawdziwy jeżeli nie koniec pętli jeżeli tak idź do następnego kroku 2) wykonaj instrukcje 3) wróć do punktu 1 Sub whilep() Dim i As Integer, k As Integer k = InputBox("podaj ile wierszy chcesz wypełnićdanymi") wczytano 5 i = 1 Do While i <= k ActiveSheet.Range("a1").Offset(i - 1, 0).Value = i i = i + 1 Loop MsgBox "i=" & Str(i) & " " & "k=" & " " & Str(k) A 1 2 3 4 5 Wykonanie pętli Do... Loop While 1) wykonaj instrukcje 2) sprawdź, czy warunek jest prawdziwy jeżeli nie koniec pętli jeżeli tak idź do punktu 1 Sub whilek() Dim i As Integer, k As Integer k = InputBox("podaj ile wierszy chcesz wypełnić danymi") wczytano 5 i = 1 Do ActiveSheet.Range("a1").Offset(i - 1, 0).Value = i i = i + 1 Loop While i <= k MsgBox "i=" & Str(i) & " " & "k=" & " " & Str(k) A 1 2 3 4 5

Opracowała Joanna Kisielińska 7 Uwaga: Różnica, jeśli k=0 Do While i <= k... Loop A Do... Loop While i <= k A 1 Wykonanie pętli Do Until... Loop 1) sprawdź, czy warunek jest prawdziwy jeżeli tak koniec pętli jeżeli nie idź do następnego kroku 2) wykonaj instrukcje 3) wróć do punktu 1 Sub whilep() Dim i As Integer, k As Integer k = InputBox("podaj ile wierszy chcesz wypełnićdanymi") wczytano 5 i = 1 Do Until i >= k ActiveSheet.Range("a1").Offset(i - 1, 0).Value = i i = i + 1 Loop MsgBox "i=" & Str(i) & " " & "k=" & " " & Str(k) A 1 2 3 4

Opracowała Joanna Kisielińska 8 Wykonanie pętli Do... Loop Until 1) wykonaj instrukcje 2) sprawdź, czy warunek jest prawdziwy jeżeli tak koniec pętli jeżeli nie idź do punktu 1 Sub whilep() Dim i As Integer, k As Integer k = InputBox("podaj ile wierszy chcesz wypełnićdanymi") wczytano 5 i = 1 Do ActiveSheet.Range("a1").Offset(i - 1, 0).Value = i i = i + 1 Loop Until i >= k MsgBox "i=" & Str(i) & " " & "k=" & " " & Str(k) A 1 2 3 4 Uwaga: Różnica, jeśli k=0 Do Until i >= k... Loop A Do... Loop Until i >= k A 1

Opracowała Joanna Kisielińska 9 Pętla While Sub ocena() Dim odp As String, i As Integer, c As Integer Do i = 0 kom = "Najdłuższą rzeką świata jest?" & vbcrlf & "a Amazonka kom = kom & vbcrlf & "b - Nil" & vbcrlf & "c - Kongo" odp = InputBox(kom) Select Case odp Case "a", "A": MsgBox "źle" : i = 1 Case "b", "B": MsgBox "dobrze" Case "c", "C": MsgBox "źle": i = 1 Case Else: MsgBox "zła litera" : i = 1 End Select Loop While i = 1 Uwaga: Aby warunek był sprawdzany na początku konieczne jest: i = 1 Do While i = 1 i = 0 Pętla Until Sub ocena() Dim odp As String, i As Integer, c As Integer Do i = 0 kom = "Najdłuższą rzeką świata jest?" & vbcrlf & "a - Amazonka" & vbcrlf kom = kom & "b - Nil" & vbcrlf & "c - Kongo" odp = InputBox(kom) Select Case odp Case "a", "A": MsgBox "źle" : i = 1 Case "b", "B": MsgBox "dobrze" Case "c", "C": MsgBox "źle" : i = 1 Case Else: MsgBox "zła litera" : i = 1 End Select Loop Until i = 0 Uwaga: Aby warunek był sprawdzany na początku konieczne jest: i = 1 Do Until i = 0 i = 0

Opracowała Joanna Kisielińska 10 Dodatkowe wyjście z pytaniem o koniec Sub ocena() Dim odp As String, i As Integer, c As Integer Do i = 0 kom = "Najdłuższą rzeką świata jest?" & vbcrlf & "a - Amazonka" & vbcrlf kom = kom & "b - Nil" & vbcrlf & "c - Kongo" odp = InputBox(kom) Select Case odp Case "a", "A": MsgBox "źle" i = 1 Case "b", "B": MsgBox "dobrze" Case "c", "C": MsgBox "źle" i = 1 Case Else: MsgBox "zła litera" i = 1 End Select If i = 1 Then c = MsgBox("czy próbujesz jeszcze raz", vbyesno) Loop While i = 1 And c = vbyes Zliczanie niepustych komórek Oblicz ile krajów jest wpisanych na arkuszu w 1 kolumnie Sub zlicz() Dim i As Integer i = 0 Do i = i + 1 Loop Until ActiveSheet.Range("a1").Offset(i - 1, 0).Value = "" MsgBox "liczba wpisanych państw=" & Str(i - 1)

Opracowała Joanna Kisielińska 11 Inne rozwiązania: Sub zlicz() Dim i As Integer i = 0 Do i = i + 1 Loop While ActiveSheet.Range("a1").Offset(i - 1, 0).Value <> "" MsgBox "liczba wpisanych państw=" & Str(i - 1) Sub zlicz() Dim i As Integer i = 0 Do While ActiveSheet.Range("a1").Offset(i, 0).Value <> "" i = i + 1 Loop MsgBox "liczba wpisanych państw=" & Str(i) Sub zlicz() Dim i As Integer i = 0 Do Until ActiveSheet.Range("a1").Offset(i, 0).Value = "" i = i + 1 Loop MsgBox "liczba wpisanych państw=" & Str(i)

Opracowała Joanna Kisielińska 12 ZMIENNE TABLICOWE Zmienna tablicowa reprezentuje grupę uporządkowanych elementów tego samego typu Zmienna tablicowa może mieć jeden lub wiele wymiarów (maksymalnie 60) Typ tablicowy zapewnia swobodny dostęp do każdego elementu tablicy przy pomocy indeksu (lub indeksów), określającego położenie elementu w tablicy Odwołanie do elementu tablicy wymaga podania nazwy tablicy oraz indeksu (lub indeksów) DEKLARACJA ZMIENNYCH TABLICOWYCH Zmienne tablicowe mogą być deklarowane przy pomocy słów kluczowych Dim lub Public Tablica jednowymiarowa Dim nazwa_tablicy(wymiar) As typ_elementów wymiar: indeks_początkowy To indeks_końcowy indeks_końcowy Elementy tablicy domyślnie numerowane są od 0 Jeśli użytkownik chce, aby wszystkie tablice numerowane były od jedynki, w obszarze declarations powinien użyć instrukcji: Option Base 1 Uwaga: Excel kontroluje zakres indeksów. Jeśli w programie następuje przekroczenie zakresu tablicy pojawia się błąd:

Opracowała Joanna Kisielińska 13 Przykłady: Dim tab(100) As Integer istnieje element tab(0), tab(100), nie ma elementu tab(101) Dim tab(1 To 100) As Integer istnieje element tab(1), tab(100), nie ma elementu tab(101), czy tab(0) Option Base 1... Dim tab(100) As Integer Tablice wielowymiarowe Deklaracja tablicy dwuwymiarowej: Dim nazwa_tablicy(wymiar1,wymiar2) As typ_elementów wymiarn: indeks_początkowyn To indeks_końcowyn indeks_końcowyn Przykłady: Dim tab(5, 4) As Double Dim tab(1 To 10, 1 To 2) As String * 5 Option Base 1... Dim tab(13, 4) As Integer Dim tab(5, 6, 7) As Long

Opracowała Joanna Kisielińska 14 WYKORZYSTANIE ZMIENNYCH TABLICOWYCH Sub num() Dim A(2) As Integer A(0) = 1 A(1) = 3 A(2) = 19 MsgBox "wartości elementów tablicy" & vbcrlf _ & A(0) & "," & A(1)& "," & A(2) Sub wek() Dim A(1 To 5) As Integer For i = 1 To 5 A(i) = i Next kom = "tablica=" For i = 1 To 5 kom = kom & A(i) & "," Next MsgBox kom Sub naj() Dim A(1 To 5) As Integer For i = 1 To 5 A(i) = Worksheets("Arkusz1").Range("A1").Offset(i - 1, 0) Next Max = A(1): j = 1 For i = 2 To 5 If A(i) > Max Then Max = A(i): j = i Next MsgBox "Największy element zapisany jest w " & j & "-tym wierszu i _ jest równy " & Max

Opracowała Joanna Kisielińska 15 Sub iloczyn() 'oblicza iloczyn macierzy Dim A(1 To 3, 1 To 4) As Integer, B(1 To 4, 1 To 2) As Integer Dim C(1 To 3, 1 To 2) As Integer ' wczytanie macierzy A For i = 1 To 3 For j = 1 To 4 A(i, j) = Worksheets("Arkusz1").Range("A1").Offset(i - 1, j - 1) Next j Next i ' wczytanie macierzy B For i = 1 To 4 For j = 1 To 2 B(i, j) = Worksheets("Arkusz1").Range("F1").Offset(i - 1, j - 1) Next j Next i ' mnożenie For i = 1 To 3 For j = 1 To 2 C(i, j) = 0 For k = 1 To 4 C(i, j) = C(i, j) + A(i, k) * B(k, j) Next k Next j Next i ' wyniki kom = "Iloczyn macierzy" & vbcrlf For i = 1 To 3 kom = kom & C(i, 1) & "," & C(i, 2) & vbcrlf Next i MsgBox kom

Opracowała Joanna Kisielińska 16 TABLICE DYNAMICZNE Tablica dynamiczna nie ma z góry określonej liczby elementów. Dim nazwa_tablicy() As typ_elementów Przed użyciem tablicy musi zostać określony jej rozmiar ReDim nazwa_tablicy(wymiary) [As typ_elementów] Sub tabl_dyn() Dim A() As Integer i = 2 j = 3 ReDim A(1 To i, 1 To j) A(2, 2) = 7 MsgBox A(2, 2) k = 11 ReDim A(1 To k) A(7) = 8 MsgBox A(7) Rozmiar tabeli może być określony przez użytkownika programu: Sub tabl_dyn() Dim A() As Integer i = InputBox("podaj liczbę wierszy tabeli") j = InputBox("podaj liczbę kolumn tabeli") ReDim A(1 To i, 1 To j) MsgBox "Macierz ma wierszy - " & i & " i kolumn - " & j

Opracowała Joanna Kisielińska 17 SORTOWANIE WEKTORA Sub sort1() Dim x() As Integer, y() As Integer m = 4 ReDim x(1 To m), y(1 To m) For i = 1 To m x(i) = ActiveSheet.Range("a1").Offset(i - 1, 0) Next i For i = 1 To m Min = x(1): k = 1 For j = 2 To m If x(j) < Min Then Min = x(j): k = j Next j x(k) = 1000 y(i) = Min Next i For i = 1 To m ActiveSheet.Range("a1").Offset(i - 1, 1).Value = y(i) Next i Sub sort2() Dim x() As Integer m = 5 ReDim x(1 To m) For i = 1 To m x(i) = ActiveSheet.Range("a1").Offset(i - 1, 0) Next i If x(1) > x(2) Then pom = x(1): x(1) = x(2): x(2) = pom For i = 3 To m j = i - 1 b = x(i) Do Until (j = 1 Or b > x(j)) x(j + 1) = x(j) x(j) = b j = j - 1 Loop If x(1) > b Then x(2) = x(1): x(1) = b Next i For i = 1 To m ActiveSheet.Range("a1").Offset(i - 1, 1).Value = x(i) Next i

Opracowała Joanna Kisielińska 18 ZMIENNE OBIEKTOWE OBIEKTY I KOLEKCJE Zmienna obiektowa reprezentuje obiekt Microsoft Excel. upraszczają zapis kodu skracają czas wykonania kodu Deklaracja Dim lub Public Przykłady WorkSheets( Arkusz1 ).Range( A1 ).Value = 567 WorkSheets( Arkusz1 ).Range( A1 ).Font.Bold = True WorkSheets( Arkusz1 ).Range( A1 ).Font.Italic = True Wykorzystanie zmiennej obiektowej: Dim Kom As Range Set Kom = WorkSheets( Arkusz1 ).Range( A1 ) Kom.Value = 567 Kom.Font.Bold = True Kom.Font.Italic = True Dim ark As Worksheet Set ark = Application.ActiveSheet ark.range("a1:c3").interior.colorindex = 2 ark.range("a1:c3").borders.colorindex = 6 ark.range("a1:c3").font.colorindex = 7 Przykładowe kody kolorów: 1-black 2-white 3-red 4-green 5-blue 6-yellow predefiniowane stałe vbblack vbwhite

Opracowała Joanna Kisielińska 19 INSTRUKCJA WITH Składnia: With obiekt instrukcje wykonywane na obiekcie (nazwy metod i właściwości poprzedzone kropką) End With With WorkSheets( Arkusz1 ).Range( A1 ).Value = 567.Font.Bold = True.Font.Italic = True End With With Application.ActiveSheet.Range("A1:C3").Interior.ColorIndex = 2.Range("A1:C3").Borders.ColorIndex = 6.Range("A1:C3").Font.ColorIndex = 7 End With INSTRUKCJA FOR EACH-NEXT Składnia: For Each element In grupa [instrukcje] [Exit For] [instrukcje] Next [element] Pętla wykonuje operacje dla wszystkich elementów grupy Wypełnienie tablicy wartościami losowymi z przedziału 0-1 i wypisanie ich w oknach dialogowych: Dim Tabl(5) As Single Randomize For i = 0 to 5 Tabl(i) = Rnd Next i For Each t In Tabl MsgBox t Next t lub Next

Opracowała Joanna Kisielińska 20 Wypisanie w oknach dialogowych nazw arkuszy w aktywnym skoroszycie: Dim ark As Worksheet For Each ark In ActiveWorkbook.Worksheets MsgBox ark.name Next ark Zamykanie nieaktywnych skoroszytów: Dim SK As Workbook For Each SK In Workbooks If SK.Name <> ActiveWorkbook.Name Then SK.Close Next SK Zamiana we wszystkich komórkach zaznaczonego obszaru liter na duże: Dim kom As Range For Each kom In Selection kom.value = UCase(kom.Value) Next kom TYPY DANYCH UŻYTKOWNIKA Typy użytkownika definiowane są w obszarze declaration Składnia: Type nazwa_typu nazwa_zm1 As type_zm1 nazwa_zm21 As type_zm2... End Type Odwołanie do elementów Dim nazwa_zmiennej As nazwa_typu nazwa_zmiennej.nazwa_zm1 nazwa_zmiennej.nazwa_zm2

Opracowała Joanna Kisielińska 21 Przykład Type rach cena As Currency ilosc As Single wartosc As Currency End Type Sub rachunek() Dim dane As rach, i As Integer, ob As Range Set ob = ActiveSheet.Range("a1") i = 1 Do Until ob.offset(i, 0).Value = "" dane.cena = ob.offset(i, 1).Value dane.ilosc = ob.offset(i, 2).Value ob.offset(i, 3).Value = dane.cena * dane.ilosc ob.offset(i, 3).NumberFormat = "#0.00 zł" i = i + 1 Loop Inne rozwiązanie: Range("D2").Value = "=B2*C2" Range("D2").Copy Destination:=Range("D3:D5") Range("D2:D5").NumberFormat = "#0.00 zł" Metoda Copy obiektu Range zakres_kopiowany.copy Destination := zakres_docelowy gdzie: zakres_kopiowany zakres, którego zawartość zostanie skopiowana Destination parametr zawierający obszar, do którego kopiowany jest zakres_kopiowany zakres_docelowy zakres ten musi być zgodny z zakresem kopiowanym

Opracowała Joanna Kisielińska 22 FUNKCJE I PROCEDURY WBUDOWANE Funkcje wbudowane: mogą być wywoływane bezpośrednio w kodzie VBA wymagają odwołania do obiektu Application.WorksheetFunction Lista funkcji wywoływanych bezpośrednio w kodzie VBA: napisać VBA i kropkę (musi być aktywna opcja Auto List Members (Tools Options zakładka Editor) Lista funkcji obiektu Application.WorksheetFunction: napisać Application.WorksheetFunction i kropkę (musi być aktywna opcja Auto List Members (Tools Options zakładka Editor) Uwaga: Pomoc na temat określonej funkcji podświetlić nazwę i F1 W przypadku funkcji obiektu Application.WorksheetFunction po kliknięciu F1 należy kliknąć List of Worksheet Functions Available to Visual Basic i wybrać funkcję z listy. Przykłady dzis = VBA.Now kom = "numer miesiąca -" & VBA.Month(dzis) MsgBox kom kom = "rok -" & VBA.Year(dzis) MsgBox kom sss = "suma w obszarze jest równa =" sss = sss & Application.WorksheetFunction.Sum(Range("b7:d9")) MsgBox sss sss = "średnia w obszarze jest równa =" sss = sss & Application.WorksheetFunction.Average(Range("b7:d9")) MsgBox sss x = Application.WorksheetFunction.Pi() MsgBox x lub x = Application.WorksheetFunction.Pi i = Application.WorksheetFunction.CountBlank(Range("a1:b10")) MsgBox i

Opracowała Joanna Kisielińska 23 PROCEDURY UŻYTKOWNIKA Procedura jest ciągiem instrukcji, którym nadawana jest nazwa. Procedury napisane przez użytkownika mogą być wywoływane z innych procedur (również z poziomu arkusza). Procedury mogą mieć parametry (argumenty), których wartość musi być określona w chwili wykonywania procedury. DEKLARACJA PROCEDURY [Private Public Static] Sub nazwa_procedury [(lista_param_form)] [instrukcje] [Exit Sub] [instrukcje] gdzie: Private procedura jest dostępna tylko w obrębie danego modułu Public procedura jest dostępna we wszystkich otwartych skoroszytach (jeśli moduł zawiera instrukcję Option Private w obszarze Declaration, dostęp zostaje ograniczony do projektu) Public jest zakresem domyślnym Static zmienne lokalne procedury zachowują wartości po jej zakończeniu nazwa_procedury nazwa musi spełniać warunki jak nazwy zmiennych. Dodatkowo musi być różna od adresów komórek (np. A3, B11, AA28) Exit Sub instrukcja powodująca natychmiastowe wyjście z procedury lista_param_form (lista parametrów formalnych) lista zmiennych oddzielonych przecinkami nazwa_par nazwa par As typ_parametru ByVal nazwa_par ByVal nazwa_par As typ_parametru Jeśli typ parametru nie został określony, ma on typ Variant

Opracowała Joanna Kisielińska 24 WYWOŁANIE PROCEDURY Wywołanie procedury w innej procedurze Call nazwa_procedury [(lista_parametrów_aktualnych)] lub nazwa_procedury [(lista_parametrów_aktualnych)] gdzie: parametr_aktualny zmienna, tablica, wyrażenie Wywołanie procedury z innego modułu Application.Run ("Skoroszyt!Moduł.nazwa_procedury") Przykład Skoroszyt Zeszyt2: Sub wywolanie() Application.Run ("Zeszyt1.xls!Module1.proc1") MsgBox "procedura wywołująca" Skoroszyt Zeszyt1, Module1: Sub proc1() MsgBox "procedura" Wywołanie procedury z poziomu arkusza Narzędzia Makro Makra

Opracowała Joanna Kisielińska 25 PRZEKAZYWANIE PARAMETRÓW DO PROCEDURY Parametry mogą być przekazywane do procedury na dwa sposoby: przez referencje (przez zmienną) - domyślnie przez wartość trzeba poprzedzić parametr ByVal Przykłady Parametry przekazywane przez referencje i przez wartość Sub p1(a As Integer, ByVal b As Integer) MsgBox a & " " & b '1 1 a = 15 b = 20 Sub p2() Dim w As Integer, z As Integer w = 1 z = 1 Call p1(w, z) MsgBox w '15 MsgBox z '1 Wyrażenie jako parametr aktualny Sub p1(a As Integer, ByVal b As Integer) MsgBox a & " " & b '3 4 a = 15 b = 20 Sub p2() Dim w As Integer, z As Integer w = 1 z = 1 Call p1(w + 2, z + 3) MsgBox w '1 MsgBox z '1

Opracowała Joanna Kisielińska 26 Parametr w postaci tablicy (musi być ostatnim parametrem) Sub p1(tabl() As Integer) Sum = 0 For Each t In Tabl Sum = Sum + t Next t MsgBox "Suma elementów tablicy " & Sum '10 Sub p2() Dim a(1 To 4) As Integer a(1) = 1: a(2) = 2: a(3) = 3: a(4) = 4 Call p1(a) Tablica jest przekazywana przez zmienną Sub p1(tabl() As Integer) Sum = 0 i = 0 For Each t In Tabl i = i + 1 Sum = Sum + t Next t MsgBox "Suma elementów tablicy " & Sum '10 For j = 1 To i Tabl(j) = Tabl(j) + 1 Next Sub p2() Dim a(1 To 4) As Integer a(1) = 1: a(2) = 2: a(3) = 3: a(4) = 4 Call p1(a) MsgBox "Tablica " & a(1) & "," & a(2) & "," & a(3) & "," & a(4) '2,3,4,5

Opracowała Joanna Kisielińska 27 WYKORZYSTANIE ZMIENNYCH GLOBALNYCH Dim agl As Integer Sub p1() Dim a As Integer a = 15 MsgBox "procedura p1, zmienna lokalna a=" & a & " zmienna globalna agl=" & agl agl = 1000 Sub p2() a = 2: agl = 7 Call p1 MsgBox "procedura p2, zmienna lokalna a=" & a & " zmienna globalna agl=" & agl Przykład Jakie komunikaty pojawią się na ekranie? Dim glo As Integer Sub p1(a As Integer, ByVal b As Integer) a = 1: b = 20: glo = 300 MsgBox "W a=" & a & " b=" & b & " glo=" & glo Sub p2() Dim i As Integer, j As Integer i = 12: j = 14: glo = 123 MsgBox "Z i=" & i & " j=" & j & " glo=" & glo Call p1(i, j) MsgBox "Z i=" & i & " j=" & j & " glo=" & glo

Opracowała Joanna Kisielińska 28 FUNKCJE UŻYTKOWNIKA Funkcje zwracają wartość. Tak jak procedury mogą mieć parametry. DEKLARACJA FUNKCJI [Private Public Static] Function nazwa_f [(lista_pf)][as typ] [instrukcje] [Exit Function] [instrukcje] End Function gdzie: nazwa_f nazwa funkcji musi spełniać takie same warunki jak nazwa procedury Exit Function instrukcja powodująca natychmiastowe wyjście z funkcji lista_pf (lista parametrów formalnych) lista zmiennych oddzielonych przecinkami nazwa_par nazwa par As typ_parametru ByVal nazwa_par ByVal nazwa_par As typ_parametru typ opcjonalny, typ wartości zwracanych przez funkcję End Function koniec funkcji WYWOŁANIE FUNKCJI zmienna = nazwa_f [(lista_pa)] Uwaga: Typ zmiennej musi się zgadzać z typem określonym w deklaracji zmienna = Skoroszyt!nazwa_f [(lista_pa)]

Opracowała Joanna Kisielińska 29 Przykład Funkcja zwracająca łańcuch w odwrotnej kolejności Function odw(a As String) As String Dim j As Long n = Len(a) odw = "" For i = 0 To n - 1 j = n - i p = VBA.Mid(a, j, 1) odw = odw & p Next i End Function Sub zew() Dim a As String, b As String a = "zajęcia z VBA" b = odw(a) MsgBox b ABV z aicęjaz Funkcja VBA Mid Mid (łańcuch, numer_poczatkowy, długość) Zwraca łańcuch o długości długość, pobrany z łańcucha począwszy od znaku numer_poczatkowy gdzie: numer_poczatkowy musi być typu long długość - jeśli pominięty wycina znaki do końca łańcucha