Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Az Excel Makro- programozása. Változók Változók deklarációja (csak Option Explicit esetén) {Dim|Public|Private|Protected|Static} vá1tozó1, változó2 As.

Hasonló előadás


Az előadások a következő témára: "Az Excel Makro- programozása. Változók Változók deklarációja (csak Option Explicit esetén) {Dim|Public|Private|Protected|Static} vá1tozó1, változó2 As."— Előadás másolata:

1 Az Excel Makro- programozása

2 Változók Változók deklarációja (csak Option Explicit esetén) {Dim|Public|Private|Protected|Static} vá1tozó1, változó2 As A VBA-ban kétféle érvényességi (láthatósági) kört különböztethetünk meg: eljárásszintű modulszintű Eljárásszintű láthatóság esetében a változót kívülről nem érhetjük el, annak a metódusnak a sajátja, amelyben deklarálva van. A deklarációs kulcsszó a Dim vagy Static. A két deklaráció között a különbség a memóriahasználatnál van, míg Static kúlcsszóval deklarált változó az alprogram lefutása után a változó értéke a memóriában marad, míg a Dim kulcsszóval deklarált változó értéke megszűnik. Modulszintű érvényességi kör esetében private és protected és public érvényességi szintű változókat deklarálhatunk. Private esetben a változó csak az őt tartalmazó modulból érhető el, public esetben pedig bárhonnan. A Protected-nek csak öröklődés esetén van szerepe. Fontos megjegyezni, hogy a típusok deklarálása sem eljárások sem függvények esetében nem kötelező, az első értékadás határozza meg a változók típusát. 2

3 Változó típusok Integer egész szám Single lebegőpontos szám Double duplapontosságú lebegőpontos szám String karaktersorozat Boolean logikai (true, false) Date dátum Variant szöveg, szám vagy dátum (automatikus típus) Object objektum 3

4 Vezérlési szerkezetek a programokban Szekvencia – egymás utáni lépések végrehajtása Szelekció – elágazás (egyágú, kétágú, háromágú többágú) Iteráció – ciklus (előírt lépésszámú, feltételes elöl vagy hátultesztelő) 4

5 Egy – két és háromágú elágazás If 1. feltétel Then 1. utasítások (ha a 1. feltétel igaz) [ElseIf 2. feltétel 2. utasítások] (amennyiben a 2. feltétel igaz) [Else 3. utasítások] (minden egyéb esetben) End If 5

6 Többágú elágazás – értéktől függő Select Case [Case ] [Case ] … [Case Else ] End Select 6

7 Feltételes operátorok Feltételek összeállításához használható operátorok: relációs operátorok: ; = ; = ; <> logikai operátorok: And ; Or ; Not ; Xor 7

8 Előírt lépésszámú ciklus - For For ciklusváltozó =ettől To eddig [Step +/-lépésköz] [utasítások] Next [ciklusváltozó] 8

9 Előírt lépésszámú ciklus – For Each For Each valtozo In Collection [utasítások] Next valtozo 9

10 Feltételes ciklus - elöltesztelő Amennyiben nem tudjuk előre megmondani, hogy hányszor kell lefuttatnunk az utasítássorozatot, akkor a feltételes ciklusok valamelyikét kell használnunk. Egy feltételes ciklus lehet elöl- illetve hátultesztelő. Elöltesztelő ciklusnál a feltétel kiértékelése a ciklus elején a Do While kulcsszavak után történik. Elöltesztelő ciklus esetben a feltétel teljesülése esetén futnak le a ciklusmagban szereplő utasítások. Do While feltétel [utasítások] Loop 10

11 Feltételes ciklus - hátultesztelő Hátultesztelő ciklusnál a feltétel kiértékelése a ciklus végén a Loop Until kulcsszavak után történik. Mindaddig történik az ismétlés, amíg a feltétel hamis. A hátultesztelő ciklus esetében a ciklusmagban lévő utasítások legalább egyszer biztosan lefutnak. Do [utasítások] Loop Until feltétel 11

12 Üzenet ablakok A program futása során a felhasználóval történő kapcsolattartás legpraktikusabb módja az üzenőablakok használata. Adatbekérésre az InputBox függvényt, míg üzenetek, válaszok küldésére a MsgBox függvényt használhatjuk. Az InputBox szintaxisa: változó = InputBox("szöveg","címke") A MsgBox szintaxisa: MsgBox („üzenet”) vagy MsgBox „üzenet” változó = MsgBox ("üzenet", paneltípus) vbOKOnly - OK gomb; vbOKCancel - Ok és Mégse gombok; vbAbortRetryIgnore - Leállítás, Ismét és Kihagyás gombok; vbYesNoCancel - Igen, Nem és Mégse gombok; vbYesNo - Igen és Nem gombok 12

13 Eljárások Mivel a VBA egy objektumorientált nyelv, utasításainkat eljárásokba és függvényekbe szervezhetjük. Minden egyes eljárást a Sub utasítással kell kezdenünk, majd a makró nevét kell megadnunk és végül zárójelek között a futáshoz szükséges paraméterlistát. Az eljárásokat az End Sub utasítással zárjuk. Sub ([paraméterlista]) [ ] End Sub Eljárás hívása: [Call] ([aktuális paraméterlista]) 13

14 Függvények Minden egyes függvényt a Function utasítással kell kezdenünk, majd a függvény nevét kell megadnunk végül zárójelek között a futáshoz szükséges paraméterlistát. A függvényeket az End Function utasítással zárjuk. Minden függvénynek kötelezően tartalmaznia kell legalább egy olyan értékadó utasítást, amelynek bal oldalán a függvény neve szerepel. Function ([paraméterlista]) [ ] függvénynév = (legalább egy értékadó utasítás) End Function Függvény hívása: ([aktuális paraméterlista]) 14

15 Megjegyzések Megjegyzéseket a program kódjába a sor elején vagy akár sorban elhelyezett aposztróffal (’) tehetünk. A Visual Basic zöld színnel jelöli a megjegyzéseket. Célszerű minél több, és minél részletesebb megjegyzést elhelyezni a programkódban, hiszen ezzel egyrészt áttekinthetőbbé tehetjük, másrészt megkönnyíthetjük a kód későbbi esetleges újraértelmezését. 15

16 Makro rögzítése 16

17 Makro szerkesztő ablak Amennyiben a Szerkesztés gombra kattintunk a Visual Basic szerkesztőben megjelenik a makrónk VBA kódja. Váltás szerkesztőnézetbe (Visual Basic Editor-ba) az Alt + F11 billentyűkombinációval is történhet. 17

18 Visual Basic editor kezelőfelülete 18

19 Munkafüzetek kezelése Munkafüzet megnyitása: Workbooks.Open (file) Munkafüzet nevének megadása felhasználóbarát módszerrel: file = Application.GetOpenFilename() Üzenetablak kezelése: If file = "False" Then MsgBox ("Nem választott vagy adott meg fájlnevet!") /A szöveg zárójel nélkül is megadható Else Workbooks.Open (file) End If 19

20 Munkafüzetek kezelése Munkafüzet bezárása: Workbooks(2).Close (a zárójelben a munkalap indexe, hányadik munkafüzet a megnyitottak közül) Aktív munkafüzet bezárása: ActiveWorkbook.Close 20

21 Munkalapok kezelése Munkalapok számának kiírása: MsgBox "A munkalapok száma=" & Worksheets.Count Új munkalap hozzáadása: ActiveWorkbook.Sheets.Add Before :=Worksheets(Worksheets.Count) – utolsó munkalap elé ActiveWorkbook.Sheets.Add After :=Worksheets(Worksheets.Count) – utolsó munkalap után ActiveWorkbook.Sheets.Add Count :=5 - öt új munkalapot szúr be Munkalap törlése: Worksheets(index).Delete Munkalap átnevezése: Activesheet.Name 21

22 Többágú elágazások kezelése Select Case valasz Case 1: ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count) Case 2: ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) Case 3: darab = InputBox("Hány új munalapot adjak hozzá?", "Hozzáaad", "5") ActiveWorkbook.Sheets.Add Count:=Val(darab) Case Else: MsgBox "1-3 közötti számot adjon meg!" End Select 22

23 Munkafüzetben lévő munkalapok kiírása For Each munkafuzet In Workbooks szoveg = szoveg & "Munkafüzet: " & munkafuzet.Name & vbNewLine & "Munkalapok: " & vbNewLine For Each lap In munkafuzet.Worksheets szoveg = szoveg & lap.Name & vbNewLine Next lap Next munkafuzet MsgBox szoveg 23

24 Képernyő villogás ideiglenes kikapcsolása kiírás idejére Application.ScreenUpdating = False //Kiíráskor ne villogjon a képernyő Application.ScreenUpdating = True //Visszakapcsolás 24

25 Könyvtár- és fájlkezelés Könyvtár megadása: konyvtar = "C:\Users\varal\Documents\„ Fájl megadása: Fajlnev = Dir(konyvtar & "*.xl*") Munkafüzet megnyitása az adott könyvtárban: Workbooks.Open (konyvtar & Fajlnev) Ciklusban végigjárható a könyvtár és megkeresi az Excel fájlokat: For Each Munkalap In Workbooks(Fajlnev).Worksheets Cells(i, j).Value = Munkalap.Name j = j + 1 Next Munkalap 25

26 Tartomány és cellaműveletek For i = 1 To 25 Cells(i, 1).Value = i // az aktuális ciklusváltozó értékével tölti fel az 1.oszlopot Range("B1:B25").Value = i //25-tel tölti fel a végén a B oszlopot Range("C1:C25").Value = "=RandBetween(1, 25)” // véletlen számokkal tölti fel a C oszlopot Next i Range(Cells(1, 4), Cells(7, 4)).Value = "=RandBetween(10, 20)” // közötti számokkal tölti fel a D oszlop első 7 sorát 26

27 Tartomány és cellaműveletek Range("Árak").Value = "=RandBetween(100, 250)" //Előtte E1:E10 tartományt elnevezni "Áraknak„ Set minta = Range("F1:H6") 'Tartomány deklaráció minta.Value = 14 minta.Select 'Tartomány kijelölése 27

28 Sor illetve oszlop kijelölés Set probasor = Range("A1:C25") probasor.Rows(Val(sor)).Select //Tartományon sor kijelölés, ha nincs ott a probasor, akkor az egész sort kijelöli! Set probaoszlop = Range("A1:C25") probaoszlop.Columns(Val(oszlop)).Select //Tartományon oszlop kijelölés, ha nincs ott a probaoszlop, akkor az egész sort kijelöli! 28

29 Tartomány másolása Range("A1:A2").Select Selection.Copy Range("G15").Select ActiveSheet.Paste Range("G17:G18").Value = Range("A1:A2").Value 'Ugyanez egy sorban 29

30 Kijelölt tartomány celláinak megszámlálása Set tartomany = Range("A1:C25") Range("A1:C25").Select MsgBox ("A tartomány celláinak száma=" & tartomany.Count) MsgBox ("Sorok száma a tartományban=" & tartomany.Rows.Count) //Sorok száma MsgBox ("Oszlopok száma a tartományban=" & tartomany.Columns.Count) //Oszlopok száma 30

31 Tartomány törlése valasz = MsgBox("Valóban törölni akasr minden elemet?", vbOKCancel + vbQuestion + vbDefaultButton2, "Kérdés") If valasz = vbOK Then Range("A1:C25").ClearContents 31

32 Számolás és cellába írás Range("D26").Value = "Összeg" Range("D27").Value = "Átlag" Range("D28").Value = "Darab" Range("D29").Value = "Minimum" Range("D30").Value = "Maximum" Range("A26").Value = "=SUM(A1:A25)" Range("A27").Value = "=AVERAGE(A1:A25)" Range("A28").Value = "=COUNT(A1:A25)" Range("A29").Value = "=MIN(A1:A25)" Range("A30").Value = "=MAX(A1:A25)" 32

33 Keretezés és színezés Range("F1:H6").Interior.Color = vbGreen Range("F1:H6").Borders.Weight = xlThick Range("F1:H6").Borders.LineStyle = xlSolid //xlDash vagy xlDot is lehet, ha nincs semmi, akkor xlNone 33

34 Színes betűs cellák összege osszeg = 0 For i = 1 To 12 If Cells(i, 15).Font.Color = vbRed Then osszeg = osszeg + Cells(i, 15).Value End If Next i MsgBox "Az O-oszlop piros számainak összege = " & osszeg 34

35 Üres cellák törlése nem folytonos oszlopból szamlalo = 0 For i = 1 To 24 If Cells(i, 16).Value <> "" Then Cells(szamlalo + 1, 17).Value = Cells(i, 16).Value szamlalo = szamlalo + 1 End If Next i 35

36 Tartomány sorbarendezése Set Rng = Range("S1").CurrentRegion For i = 1 To Rng.Count For j = i + 1 To Rng.Count If Rng.Cells(j) < Rng.Cells(i) Then temp = Rng.Cells(i) Rng.Cells(i) = Rng.Cells(j) Rng.Cells(j) = temp End If Next j Next i 36

37 Ismétlődések megkeresése oszlopban és eltávolításuk Cells(1, 22).Value = Cells(1, 21).Value egyediszam = 1 hozzaad = True For i = 2 To 10 For j = 1 To egyediszam If Cells(i, 21).Value = Cells(j, 22).Value Then hozzaad = False End If Next j If hozzaad = True Then Cells(egyediszam + 1, 22).Value = Cells(i, 21).Value egyediszam = egyediszam + 1 End If hozzaad = True Next i 37

38 Lépésközök For ciklusban (STEP) For i = 1 To 16 Step 2 Cells(i, 25).Value = 100 Next i For j = 25 To 13 Step -2 Cells(20, j).Value = 50 Next j 38

39 Hibakezelés Set Rng = Selection For Each cell In Rng On Error Resume Next cell.Value = Sqr(cell.Value) Next cell 39

40 Adatok fájlba írása fajlnev = Application.DefaultFilePath & "\adatok.txt" Set tartomany = Selection Open fajlnev For Output As #1 For i = 1 To tartomany.Rows.Count For j = 1 To tartomany.Columns.Count cellaertek = tartomany.Cells(i, j).Value If j = tartomany.Columns.Count Then Write #1, cellaertek Else Write #1, cellaertek, End If Next j Next i Close #1 40

41 Adatok fájlból olvasása i = 35 fajlnev = Application.GetOpenFilename() Open fajlnev For Input As #1 Do While Not EOF(1) //Fájl vége jelig olvasunk, mert nem tudjuk hány adat van benne Line Input #1, sor pozicio = InStr(sor, ",") elso = Left(sor, pozicio - 1) //Vesszőt, mai az elválasztó megkeressük és annál elvágjuk az adatokat egymástól masodik = Right(sor, Len(sor) - pozicio) Cells(i, 1).Value = Val(elso) Cells(i, 2).Value = Val(masodik) i = i + 1 Loop Close #1 41


Letölteni ppt "Az Excel Makro- programozása. Változók Változók deklarációja (csak Option Explicit esetén) {Dim|Public|Private|Protected|Static} vá1tozó1, változó2 As."

Hasonló előadás


Google Hirdetések