Podstawy programowania w VBA Microsoft Office Excel 2003
Edytor VBA 2/20 Skrót Alt+F11
Opcje edytora VBA 3/20
Najważniejsze opcje edytora VBA 4/20 Auto Syntax Check Auto List Members Auto Quick Info Auto Syntax Check ! Zaznaczenie opcji działa od nowo otwartego modułu Auto Data Tips
Okienko Immediate Skrót Ctrl + G Sub procSub(arg) a = arg + arg 5/20 Skrót Ctrl + G Sub procSub(arg) a = arg + arg Debug.Print a End Sub Function procFunc(arg) procFunc = arg + arg End Function
Hierarchia obiektów 6/20 Excel Zeszyt1.xls Zeszyt2.xls … Arkusz1 Komórki A1, A2, …, IV65536 Workbook WorkSheet Application Range WorkSheet Range WorkSheets Workbook Workbooks WorkSheets Application.Workbooks(„Zeszyt1.xls”).WorkSheets(„Arkusz1”).Range(„A1”)
Objekty aktywne Wartosc = Application.Workbooks(„Zeszyt.xls”). _ 7/20 Wartosc = Application.Workbooks(„Zeszyt.xls”). _ Worksheets(„Arkusz1”).Range(„A1”).Value Jeżeli Zeszyt.xls jest aktualnie otwartym dokumentem Wartosc = Worksheets(„Arkusz1”).Range(„A1”).Value Wartosc = ActiveWorkbook. _ oraz Arkusz1 jest aktualnie otwartym arkuszem Wartosc = Range(„A1”).Value Wartosc = ActiveSheet.Range(„A1”).Value Workbook Worksheet
Określenie argumentów dla metod i właściwości 8/20 Object.Protect([Password],[Structure],[Windows]) ActiveWorkbook.Protect „abc”, True, False ActiveWorkbook.Protect , True, False ActiveWorkbook.Protect Structure:=True Gdy metody i właściwości zwracają wartość adres = ActiveCell.Adress(False, True); adres = ActiveCell.Adress(ColumnAbsolute:=True); Object.Adress([RowAbsolute],[ColumnAbsolute]…) As String
Obiekt Range Istnieją 3 możliwości uzyskania objectu Range. 9/20 Istnieją 3 możliwości uzyskania objectu Range. Właściwość Range obiektu Worksheet lub obiektu klasy Range Właściwość Cells obiektu Worksheet lub obiektu klasy Range Właściwość Offset obiektu Range Odwołanie do komórki może być bezwzględne względne
Obiekt Range I. Właściwość Range 10/20 Właściwość Range zwraca obiekt Range obiekt.Range(komórka1) objekt.Range(komórka1,komórka2) Właściwość Range obiektu Worksheet (przykłady) ActiveSheet.Range(”A1”).Value=1 ActiveSheet.Range(”A3:B5”).Value=2 ActiveSheet.Range(”A3”,”B5”).Value=3 ActiveSheet.Range(”C1,E3,F2”).Value=4 Właściwość Range obiektu Range (przykład) ActiveCell.Range(”B2”) = 5 ‘odwołanie względne
Obiekt Range II. Właściwość Cells 11/20 Właściwość Cells zwraca obiekt Range obiekt.Cells(idRow,idColumn) obiekt.Cells(idRow) obiekt.Cells Właściwość Cells obiektu Worksheet (przykłady) ActiveSheet.Cells(1,1).Value=1 ActiveSheet.Cells(520).Value=2 ActiveSheet.Cells.ClearContents Właściwość Cells obiektu Range (przykłady) ActiveCell.Cells(3,2).Value=3 ‘odwołanie względne Range(”B1:C10”).Cells(5).Value=4 ‘odwołanie względne
Obiekt Range III. Właściwość Offset 12/20 Właściwość Offset zwraca objekt Range obiekt.Offset(idRow, idColumn) Właściwość Offset obiektu Range ActiveCell.Offset(0,0).Value=3 ‘odwołanie względne ActiveCell.Offset(-1,2).Value=3 ‘odwołanie względne
Obiekt Range Odwołanie względne i bezwzględne 13/20 ActiveSheet.Range(”A7”).Value = ”abc” WorkSheets(”Ark1”).Cells(1,1).Value = 123 ActiveCell.Range(”A3”).Value = ”range” Range(”D6”).Cells(1,1).Value = ”cells” ActiveCell.Offset(0,0).Value = ”offset” odwołanie bezwzględne WorkSheet odwołanie względne Range A B C 123 1 2 3 offset Odwołanie względem aktywnej komórki range cells Odwołanie względem komórki D6 abc
Procedury Sub i Function 14/20 Function procFunc(arg) procFunc = arg*2 End Function zm=5 zm = procFunc(zm) MsgBox zm Sub procSub(arg) arg = arg*2 End Sub zm=5 Call procSub(zm) MsgBox zm nie zwraca wartości wymaga słowa kluczowego call do wywołania procedury Argumenty przekazywane są przez referencję zwraca wartość (wartość zwracana nazywa się tak samo jak funkcja) argumenty przekazywane są przez wartość dodaje się do funkcji użytkownika (dostępne z poziomu formuły)
Procedury Sub Sub procSub(arg) Sub procSub(byVal arg) arg = arg*2 15/20 Sub procSub(arg) arg = arg*2 End Sub Sub procSubMain() zm = 5 MsgBox zm Call procSub(zm) Sub procSub(byVal arg) arg = arg*2 End Sub Sub procSubMain() zm = 5 MsgBox zm Call procSub(zm)
Definiowanie typów danych 16/20 Dim zm1 As Intiger Dim zm2 As Double Dim zm3 As String*4 Dim zm4 As String zm1 = 10 zm2 = 10,67 zm3 = ”abcd” zm4 = ”abcd” zm5 = 10 zm6 = 10,67 zm7 = ”abcd” ‘liczba całkowita ‘liczba rzeczywista ‘łańcuch znaków (stała długość) ‘łańcuch znaków (zmienna długość) ‘typ Intiger; 2 bajty ‘typ Double; 8 bajtów ‘typ String; 4 bajty ‘typ String; 14 bajtów ‘typ Variant; 16 bajtów ‘typ Variant; 26 bajtów
Instrukcje warunkowe i pętle 17/20 IF warunek Then … Else If Else End IF For Each i in tab … Next i For i=1 To 5 … Next i Select Case opcja Case 1 … Case 2 Case Else End Select Do While warunek … Loop Do … Loop While warunek
Tablice 18/20 ‘Deklarowanie tablicy o 5 elementach typu całkowitego Dim tablicaInt(5) As Integer ‘Deklarowanie tablicy dynamicznej typu tekstowego Dim tablicaStr() As String ‘Nadanie rozmiaru tablicy n=5 ReDim tablicaStr(1 To n) ‘Przypisanie wartości pierwszemu elementowi tablicy tablicaStr(1)= ”abcdef” ‘Wykorzystanie pętli for do wypełnienia tablicy For i=1 To n tablicaStr(i) = ”abcdef” Next i
Właściwość Selection objektu Application 19/20 Areas(1) Selection Areas(2) obiekt Range Areas(3) Areas(4) Areas(5) Lob = Selection.Areas.Count ‘ Lob=5 Lkom = Selection.Areas(1).Count ‘ Lkom=4 w = Selection.Areas(1).Row ‘ w=1 k = Selection.Areas(1).Column ‘ k=1 Lw = Selection.Areas(1).Rows.Count ‘ Lw=2 Lk = Selection.Areas(1).Columns.Count ‘ Lk = 2
Wypełnianie tablicy wartościami z zaznaczonych komórek arkusza 20/20 Sub Wypelnij() Dim TabStr() As String If TypeName(Selection) = "Range" Then k = 1 For Each obszar In Selection.Areas PwOb = obszar.Row PkOb = obszar.Column iW = obszar.Rows.Count iK = obszar.Columns.Count rozmiar = k - 1 + iW * iK ReDim Preserve TabStr(rozmiar) For i = PwOb To PwOb + iW - 1 For j = PkOb To PkOb + iK - 1 TabStr(k) = Cells(i, j).Value k = k + 1 Next j Next i Next obszar End If End Sub a1 b1 a2 b2 a6 b7 b4 c4 d4 d6 d7 d8 obszar PwOb PkOb iW iK rozm i i<=iW j J<=iK k TabStr