Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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 <adattípus>, változó2 As <adattípus> 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.
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
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ő)
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
6
Többágú elágazás – értéktől függő
Select Case <kifejezés> [Case <1. kifejezés> <1. utasítások>] [Case <2. kifejezés> <2. utasítások>] … [Case Else <különben utasítások>] End Select
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
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ó]
9
Előírt lépésszámú ciklus – For Each
For Each valtozo In Collection [utasítások] Next valtozo
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
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
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
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 <eljárásnév>([paraméterlista]) [<deklarációk>] <utasítások> End Sub Eljárás hívása: [Call] <eljárásnév> ([aktuális paraméterlista])
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 <függvénynév>([paraméterlista]) [<deklarációk>] <utasítások> függvénynév = (legalább egy értékadó utasítás) End Function Függvény hívása: <függvénynév> ([aktuális paraméterlista])
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.
16
Makro rögzítése
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.
18
Visual Basic editor kezelőfelülete
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 End If
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
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
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
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
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
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
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
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
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!
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
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
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
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)"
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
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
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
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
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 Next i
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
39
Hibakezelés Set Rng = Selection For Each cell In Rng On Error Resume Next cell.Value = Sqr(cell.Value) Next cell
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
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.