Podstawy programowania w VBA
description
Transcript of Podstawy programowania w VBA
Podstawy programowania w VBA
Microsoft Office Excel 2003
Edytor VBA
Skrót Alt+F11
2/20
Opcje edytora VBA3/20
Najważniejsze opcje edytora VBA
Auto List Members
Auto Quick Info
Auto Data Tips
Auto Syntax Check
Auto Syntax Check! Zaznaczenie opcji działa od nowo otwartego modułu
4/20
Okienko Immediate
Skrót Ctrl + G
Sub procSub(arg) a = arg + arg Debug.Print aEnd Sub
Function procFunc(arg) procFunc = arg + argEnd Function
5/20
Hierarchia obiektów
Excel Zeszyt1.xls
Zeszyt2.xls
…
Arkusz1
Arkusz2
…
Arkusz1Arkusz2
…
Komórki A1, A2, …, IV65536
Komórki A1, A2, …, IV65536
Application
Workbooks
Range
Range
WorkSheets
WorkSheets
Workbook
Workbook
WorkSheet
WorkSheet
Application.Workbooks(„Zeszyt1.xls”).WorkSheets(„Arkusz1”).Range(„A1”)
6/20
Objekty aktywne
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 arkuszemWartosc = Range(„A1”).Value
Wartosc = ActiveSheet.Range(„A1”).Value
Workbook
Worksheet
7/20
Określenie argumentów dla metod i właściwości
• Gdy metody i właściwości zwracają wartość
adres = ActiveCell.Adress(False, True);
adres = ActiveCell.Adress(ColumnAbsolute:=True);
Object.Protect([Password],[Structure],[Windows])
Object.Adress([RowAbsolute],[ColumnAbsolute]…) As String
ActiveWorkbook.Protect „abc”, True, False
ActiveWorkbook.Protect , True, False
ActiveWorkbook.Protect Structure:=True
8/20
Obiekt Range
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
9/20
Obiekt Range I. Właściwość Range
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=1ActiveSheet.Range(”A3:B5”).Value=2ActiveSheet.Range(”A3”,”B5”).Value=3ActiveSheet.Range(”C1,E3,F2”).Value=4
Właściwość Range obiektu Range (przykład) ActiveCell.Range(”B2”) = 5 ‘odwołanie względne
10/20
Obiekt Range II. Właściwość Cells
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=1ActiveSheet.Cells(520).Value=2ActiveSheet.Cells.ClearContents
Właściwość Cells obiektu Range (przykłady)ActiveCell.Cells(3,2).Value=3 ‘odwołanie względneRange(”B1:C10”).Cells(5).Value=4 ‘odwołanie względne
11/20
Obiekt Range III. Właściwość Offset
Właściwość Offset zwraca objekt Range• obiekt.Offset(idRow, idColumn)
Właściwość Offset obiektu RangeActiveCell.Offset(0,0).Value=3 ‘odwołanie względneActiveCell.Offset(-1,2).Value=3 ‘odwołanie względne
12/20
Obiekt Range Odwołanie względne i bezwzględne
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”
range
123
A B C
123
Odwołanie względem komórki D6
abccells
offset
odwołaniewzględne
odwołaniebezwzględne
WorkSheet
Range
Odwołanie względem aktywnej komórki
13/20
Procedury Sub i Function
Sub procSub(arg)arg = arg*2
End Sub
zm=5Call procSub(zm)MsgBox zm
Function procFunc(arg)procFunc = arg*2
End Function
zm=5zm = procFunc(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)
14/20
Procedury Sub
Sub procSub(arg)arg = arg*2End Sub
Sub procSubMain() zm = 5
MsgBox zmCall procSub(zm)MsgBox zm
End Sub
Sub procSub(byVal arg)arg = arg*2End Sub
Sub procSubMain() zm = 5
MsgBox zmCall procSub(zm)MsgBox zm
End Sub
15/20
Definiowanie typów danych
Dim zm1 As IntigerDim zm2 As DoubleDim zm3 As String*4Dim zm4 As String
zm1 = 10zm2 = 10,67zm3 = ”abcd”zm4 = ”abcd”
zm5 = 10zm6 = 10,67zm7 = ”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
16/20
Instrukcje warunkowe i pętle
IF warunek Then…Else If…Else…End IF For i=1 To 5
…Next i
For Each i in tab…Next i
Select Case opcja Case 1…Case 2…Case Else…
End Select
Do While warunek…Loop
Do …Loop While warunek
17/20
Tablice
‘Deklarowanie tablicy o 5 elementach typu całkowitegoDim tablicaInt(5) As Integer ‘Deklarowanie tablicy dynamicznej typu tekstowegoDim tablicaStr() As String
‘Nadanie rozmiaru tablicyn=5ReDim tablicaStr(1 To n)
‘Przypisanie wartości pierwszemu elementowi tablicytablicaStr(1)= ”abcdef”
‘Wykorzystanie pętli for do wypełnienia tablicyFor i=1 To n
tablicaStr(i) = ”abcdef”Next i
18/20
Właściwość Selection objektu Application
Lob = Selection.Areas.Count ‘ Lob=5Lkom = Selection.Areas(1).Count ‘ Lkom=4w = Selection.Areas(1).Row ‘ w=1k = Selection.Areas(1).Column ‘ k=1Lw = Selection.Areas(1).Rows.Count ‘ Lw=2Lk = Selection.Areas(1).Columns.Count ‘ Lk = 2
Selection
Areas(1)
Areas(2)
Areas(3)Areas(4)
Areas(5)
obiekt Range
19/20
Wypełnianie tablicy wartościami z zaznaczonych komórek arkusza
Sub Wypelnij()Dim TabStr() As String If TypeName(Selection) = "Range" Then k = 1
For Each obszar In Selection.Areas PwOb = obszar.Row
PkOb = obszar.ColumniW = obszar.Rows.CountiK = obszar.Columns.Countrozmiar = k - 1 + iW * iKReDim 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 IfEnd Sub
20/20
a1 b1a2 b2
a6
b7
b4 c4 d4
d6
d7d8
obszar PwOb PkOb iW iK rozm i i<=iW j J<=iK k TabStr