Podstawy programowania w VBA

20
Podstawy programowania w VBA Microsoft Office Excel 2003

description

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. - PowerPoint PPT Presentation

Transcript of Podstawy programowania w VBA

Page 1: Podstawy  programowania w VBA

Podstawy programowania w VBA

Microsoft Office Excel 2003

Page 2: Podstawy  programowania w VBA

Edytor VBA

Skrót Alt+F11

2/20

Page 3: Podstawy  programowania w VBA

Opcje edytora VBA3/20

Page 4: Podstawy  programowania w VBA

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

Page 5: Podstawy  programowania w VBA

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

Page 6: Podstawy  programowania w VBA

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

Page 7: Podstawy  programowania w VBA

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

Page 8: Podstawy  programowania w VBA

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

Page 9: Podstawy  programowania w VBA

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

Page 10: Podstawy  programowania w VBA

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

Page 11: Podstawy  programowania w VBA

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

Page 12: Podstawy  programowania w VBA

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

Page 13: Podstawy  programowania w VBA

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

Page 14: Podstawy  programowania w VBA

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

Page 15: Podstawy  programowania w VBA

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

Page 16: Podstawy  programowania w VBA

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

Page 17: Podstawy  programowania w VBA

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

Page 18: Podstawy  programowania w VBA

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

Page 19: Podstawy  programowania w VBA

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

Page 20: Podstawy  programowania w VBA

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