200 likes | 534 Views
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.
E N D
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 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 Komórki A1, A2, …, IV65536 Komórki A1, A2, …, IV65536 Zeszyt1.xls Zeszyt2.xls … Arkusz1 Arkusz2 … Arkusz1 Arkusz2 … Excel WorkSheet Workbook Range Application WorkSheet Range WorkSheets Workbook WorkSheets Workbooks Application.Workbooks(„Zeszyt1.xls”).WorkSheets(„Arkusz1”).Range(„A1”)
Objekty aktywne 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. _ Worksheets(„Arkusz1”).Range(„A1”).Value • 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]) • Gdy metody i właściwości zwracają wartość adres = ActiveCell.Adress(False, True); adres = ActiveCell.Adress(ColumnAbsolute:=True); ActiveWorkbook.Protect „abc”, True, False ActiveWorkbook.Protect , True, False ActiveWorkbook.Protect Structure:=True Object.Adress([RowAbsolute],[ColumnAbsolute]…) As String
Obiekt 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ść Offsetobiektu Range Odwołanie do komórki może być • bezwzględne • względne
Obiekt RangeI. 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 RangeII. 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 RangeIII. Właściwość Offset 12/20 • Właściwość Offset zwraca objekt Range • obiekt.Offset(idRow, idColumn) • Właściwość Offsetobiektu Range • ActiveCell.Offset(0,0).Value=3 ‘odwołanie względne • ActiveCell.Offset(-1,2).Value=3 ‘odwołanie względne
Obiekt RangeOdwoł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 B C A 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 15/20 Sub procSub(arg) arg = arg*2 End Sub Sub procSubMain() zm = 5 MsgBox zm Call procSub(zm) MsgBox zm End Sub Sub procSub(byVal arg) arg = arg*2 End Sub Sub procSubMain() zm = 5 MsgBox zm Call procSub(zm) MsgBox zm End Sub
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; 16 bajtów ‘typ Variant; 26 bajtów
Instrukcje warunkowe i pętle 17/20 IFwarunekThen … 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 SubWypelnij() DimTabStr() As String IfTypeName(Selection) = "Range" Then k = 1 For Eachobszar InSelection.Areas PwOb = obszar.Row PkOb = obszar.Column iW = obszar.Rows.Count iK = obszar.Columns.Count rozmiar = k - 1 + iW * iK ReDimPreserveTabStr(rozmiar) For i = PwOb To PwOb + iW - 1 For j = PkObToPkOb + iK - 1 TabStr(k) = Cells(i, j).Value k = k + 1 Nextj Next i Nextobszar EndIf EndSub b1 a1 a2 b2 b4 c4 d4 a6 d6 b7 d7 d8