Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaBrigitta Faragóné Megváltozta több, mint 7 éve
1
Előadó: Édes Péter http://epeter.hu
Az Excel programozása Előadó: Édes Péter
2
Visual Basic Visual Basic - VB Visual Basic for Applications - VBA
önálló Windows alkalmazások készítése eseményvezérelt programkód Visual Basic for Applications - VBA a VB bizonyos részeit tartalmazza a programot valamely Office alkalmazás futtatja - makró
3
Objektummodell Objektum (object) Objektumgyűjtemény (collection)
Az Excel alkotóelemei az objektumok (pl. munkafüzet, munkalap, stb.) Objektumgyűjtemény (collection) A több példányban előforduló, azonos típusú objektumok gyűjteményt alkotnak. Tulajdonság (properties) az objektum viselkedésmódját, megjelenési formáját (szín, méret, stb.) határozzák meg Metódus (method) az objektumok műveleteinek összefoglaló neve (pl. Add, Open, Close, PrintOut, stb.)
4
Workbooks gyűjtemény wokbooks.Add ?workbooks.Count workbooks.Close
Alt+F11 (VBE), Nézet (View) - Próbaablak (Immediate) wokbooks.Add új munkafüzet hozzáadása ?workbooks.Count munkafüzetek számának kiírása workbooks.Close összes munkafüzet bezárása workbooks(„Munkafüzet1”).Close Munkafüzet1 bezárása
5
Worksheets gyűjtemény
Worksheets.Add új munkalap beszúrása ?Worksheets(1).Name kiírja az aktív munkafüzet első munkalapjának nevét Worksheets(1).Name=„Első” az aktív munkafüzet első munkalapjának nevét „Első”-re változtatja Worksheets(„Első”).Move after:=worksheets(3) az „Első” nevű munkalapot átmozgatja a 3. után
6
Tartományok és cellák Cells(3,2).Select Cells(3,2)=25%
kiválasztja a B3-as cellát Cells(3,2)=25% a B3 cellába beírja a 25%-ot Range(„B2:C10”).Select kijelöli a B2:C10 tartományt Range(„B2:C10”)=„Excel” a B2:C10 tartomány minden cellájába beírja az Excel szöveget ?Range(„B5”) megjeleníti a B5 cella tartalmát
7
Makró létrehozása rögzítéssel
8
1. feladat– Makró rögzítése
Hozzunk létre egy makrót, amely az aktív cellába elhelyezi a mai dátumot, Arial, 20p magas, kék színű betűkkel! A makró a Ctlr+M billentyűkombinációval is legyen elindítható!
9
Adattípusok Adattípus Adat Jel Boolean Igaz-Hamis Integer
Egész szám (2bájt) % Long Hosszú egész (4bájt) & Single Tizedestört (4bájt) ! Double Tizedestört (8bájt) # Currency Pénznem @ Date Dátum Object Objektum String Szöveg $ Array Tömb
10
Változó definiálása Dim Változó As String Dim V1, V2, V3 As Integer
Nem kötelező, de ajánlott. A Modul első sorába beírt Option Explicit sorral kötelezővé tehetjük. Dim Változó As String Dim V1, V2, V3 As Integer Dim Név As String* 15 Dim Lap As Worksheet Felhasználói típus Type Adataim Név As String Életkor As Integer End Type … Dim Dolgozó As Adataim
11
Változók hatóköre Public (régebben Global) Dim Static
Modulszintű, a modul tetején kell definiálni. Dim Modulszintű, vagy eljárásszintű. Static Csak eljáráson belül definiálható.
12
Műveletek Aritmetikai Logikai Relációs Szöveg + - * / ^ Mod
Not, And, Or, Xor, Eqv Relációs < > = <= >= <> Szöveg & (konkatenáció)
13
2. feladat Jelenítsük meg két szám összegét! Sub Összeg()
Dim A, B, Össz As Integer A = 10 B = 20 Össz = A + B MsgBox (A & "+" & B & "=" & Össz) End Sub A = Range("A1") B = Range("A2") Range("A3") = Össz
14
Üzenet megjelenítése - MsgBox
MsgBox(prompt[,buttons][,title]) Prompt: a kiírandó üzenet Buttons: nyomógombok és szimbólumok Title: a párbeszédablak címe
15
A MsgBox Buttons paraméterei
Constant Value Description vbOKOnly OK button only (default) vbOKCancel 1 OK and Cancel buttons vbAbortRetryIgnore 2 Abort, Retry, and Ignore buttons vbYesNoCancel 3 Yes, No, and Cancel buttons vbYesNo 4 Yes and No buttons vbRetryCancel 5 Retry and Cancel buttons vbCritical 16 Critical message (X) vbQuestion 32 Warning query (?) vbExclamation 48 Warning message (!) vbInformation 64 Information message (i) vbDefaultButton1 First button is default (default) vbDefaultButton2 256 Second button is default vbDefaultButton3 512 Third button is default vbDefaultButton4 768 Fourth button is default
16
A MsgBox visszaadott értékei
Constant Value Description vbOK 1 OK button pressed vbCancel 2 Cancel button pressed vbAbort 3 Abort button pressed vbRetry 4 Retry button pressed vbIgnore 5 Ignore button pressed vbYes 6 Yes button pressed vbNo 7 No button pressed
17
Jelenítsünk meg egy „kérdés” ablakot „igen” és „nem” gombokkal!
3. feladat Jelenítsünk meg egy „kérdés” ablakot „igen” és „nem” gombokkal! Sub Kérdés() Dim Válasz As Integer Válasz = MsgBox("Szereted a számítógépet?", vbQuestion + vbYesNo, "Fontos") If Válasz = vbYes Then MsgBox ("Akkor jó!") Else MsgBox ("Sajnálom!") End If End Sub
18
Adat beolvasása - InputBox
Változó = InputBox(Üzenet, Cím, Alapérték) Üzenet: ez a szöveg jelenik meg az ablakban Cím: az ablak címsorának felirata Alapérték: alapértelmezett érték
19
4. feladat Írassuk ki egy négyzet kerületét, területét Sub négyzet()
Dim a, K, T As Double Dim Kiírandó As String a = Cdbl(InputBox("Kérem az a oldal hosszát!", "Négyzet", 10)) K = 4 * a T = a ^ 2 Kiírandó = "K = " & K & Chr(10) & "T = " & T MsgBox (Kiírandó) End Sub
20
5. feladat Írassuk ki egy háromszög kerületét, területét
Sub háromszög() Dim a, b, c, K, T, s As Double a = CDbl(InputBox("Kérem az a oldal hosszát!", "Háromszög", 1)) b = CDbl(InputBox("Kérem a b oldal hosszát!", "Háromszög", 1)) c = CDbl(InputBox("Kérem a c oldal hosszát!", "Háromszög", 1)) K = a + b + c s = K / 2 T = Sqr(s * (s - a) * (s - b) * (s - c)) Kiírandó = "K = " & K & Chr(10) & "T = " & T MsgBox (Kiírandó) End Sub
21
Vezérlési szerkezetek
Ugrás (GoTo) Feltételes elágazás (If) Többirányú elágazás (Select Case) Ciklusképzés Do…Loop For … Next For Each … Next While
22
6. feladat - GoTo Számítsuk ki a kör kerületét, területét. Sub kör()
Dim r, K, T, Pi As Double Dim Kiírandó As String Pi = Application.Pi() Adatbekérés: r = CDbl(InputBox("Kérem a kör sugarát!", "Kör", 1)) If r <= 0 Then MsgBox ("A kör sugara nem lehet negatív, vagy 0!") GoTo Adatbekérés Else K = 2 * r * Pi T = r ^ 2 * Pi Kiírandó = "K = " & K & Chr(10) & "T = " & T MsgBox (Kiírandó) End If End Sub
23
Feltételes elágazás If feltétel Then Else End If If feltétel Then
parancsok Else End If If feltétel Then parancsok ElseIf feltétel2 Then Else End If
24
7. feladat Olvassunk be egy számot, és állapítsuk meg, hogy pozitív-e.
Sub pozitív() Dim szám As Double szám = CDbl(InputBox("Kérek egy számot!", "Számvizsgáló")) If szám > 0 Then MsgBox ("Ez a szám pozitív!") ElseIf szám < 0 Then MsgBox ("Ez a szám negatív!") Else MsgBox ("Ez a szám a nulla") End If End Sub
25
Többirányú elágazás Select Case érték End Select Case vizsgálat1
parancsok1 Case vizsgálat2 parancsok2 … Case vizsgálatn parancsokn Case else parancsok_else End Select
26
Végezzük el egy dolgozat értékelését!
8. feladat Sub dolgozat() Dim pontszám As Integer pontszám = CInt(InputBox("Kérem a pontszámot!", "Dolgozat")) Select Case pontszám Case 72 To 80 MsgBox ("Jeles") Case 64 To 71 MsgBox ("Jó") Case 56 To 63 MsgBox ("Közepes") Case 48 To 55 MsgBox ("Elégséges") Case 0 To 47 MsgBox ("Elégtelen") Case Else MsgBox ("Nemlétező pontszám") End Select End Sub Végezzük el egy dolgozat értékelését! 72-80 Jeles 64-71 Jó 56-63 Közepes 48-55 Elégséges 0-47 Elégtelen
27
Do … Loop ciklus - While A ciklus addig fut, amíg a feltétel igaz.
Do While feltétel ‘Elől tesztel ciklusmag Loop Do Loop While feltétel ‘Hátul tesztel
28
9. feladat Az A1:A100 tartományt töltsük fel számokkal! Sub DoLoop_1()
Dim i As Integer i = 1 Do While i <= 100 Cells(i, 1) = i i = i + 1 Loop End Sub
29
10. feladat Olvassunk be egy 100-nál kisebb pozitív számot, és tároljuk az A1-es cellában a szám köbgyökét! Sub köbgyök() Dim x As Double Do x = CDbl(InputBox("Kérem a számot!", "Köbgyök")) Loop While x <= 0 Or x >= 100 Range("A1") = x ^ (1 / 3) End Sub
30
Do … Loop ciklus - Until A ciklus addig fut, amíg a feltétel hamis.
Do Until feltétel ‘Elől tesztel ciklusmag Loop Do Loop Until feltétel ‘Hátul tesztel
31
Az A1:J1 tartományba írjuk fel 2 hatványait (1-től 10-ig)!
11. feladat Az A1:J1 tartományba írjuk fel 2 hatványait (1-től 10-ig)! Sub hatványok() Dim x As Integer x = 1 Do Until x > 10 Cells(1, x) = 2 ^ x x = x + 1 Loop End Sub
32
12. feladat Számítsuk ki a felhasználó életkorát! Sub életkor()
Dim napok As Integer Dim szüldátum As Date Do szüldátum = CDate(InputBox("Add meg a születési dátumod!", "Életkor")) Loop Until szüldátum < Date napok = Date - szüldátum MsgBox ("Életkorod: " & napok & " nap") End Sub
33
For … Next Előre tudjuk, hogy hányszor kell lefuttatni a ciklusmagot!
For i = kezdőérték To végérték Step lépésköz ciklusmag Next i
34
13. feladat Olvassunk be 5 számot, és írassuk ki a szorzatukat!
Sub szorzat() Dim szám, szorzat As Double Dim i As Integer szorzat = 1 For i = 1 To 5 szám = CDbl(InputBox("Kérem a(z) " & i & ". számot", "Szorzat")) szorzat = szorzat * szám Next i MsgBox ("Az öt szám szorzata = " & szorzat) End Sub
35
For Each … Next Egy objektumgyűjtemény minden egyes elemén egy parancsszériát hajt végre. 14. feladat Zárjuk be az összes munkafüzetet! Sub bezár() Dim munkafüzet As Variant For Each munkafüzet In Application.Workbooks munkafüzet.Close Next munkafüzet End Sub
36
Exit Do Kilépés Do … Loop ciklusból Sub kilép_Do()
Dim sorszámláló, folytatás As Integer Worksheets(1).Select Worksheets(1).Cells(5, 1).Value = 77 sorszámláló = 1 Do Cells(sorszámláló, 1).Select If Cells(sorszámláló, 1).Value = 77 Then MsgBox ("Megtaláltuk a 77-et tartalmazó cellát!") Exit Do End If sorszámláló = sorszámláló + 1 folytatás = MsgBox("Folytassuk a keresést?", vbYesNo) Loop While folytatás = vbYes End Sub
37
Exit For Kilépés For … Next ciklusból Sub Keres()
Dim üzenet, Szöveg As String Dim karakter As Integer ' A program megadja egy szövegben az r betű pozícióját. üzenet = "Adj be egy szöveget, megadom az r betű pozícióját!" Szöveg = LCase(InputBox(üzenet, "R betű keresés")) For karakter = 1 To Len(Szöveg) If Mid(Szöveg, karakter, 1) = "r" Then MsgBox ("A(z) " & karakter & "." & "pozícióban" _ & " r" & " betű van!") Exit For End If Next karakter End Sub
38
While A ciklus akkor fut le, ha a vizsgált feltétel igaz.
While feltétel utasítások Wend
39
17. feladat 'Az eredmény látható: Nézet menü Próba ablak-ban...
'(View/Immediate Window) Sub WHILE1() Dim számláló As Integer számláló = 0 While számláló < 10 számláló = számláló + 1 Wend Debug.Print "Számláló értéke"; számláló ' 10 látható a Debug ablakban. End Sub
40
Vételen ciklus Program leállítása Egyéni kezelés: Esc (Ctrl+Alt+Del)
Application.EnableCancelKey= … xlDisabled – A megszakítás nem lehetséges. xlInterrupt – A megszakítás lehetséges. xlErrorHandler – Egyéni hibakezelés.
41
18. feladat Sub hiba() Dim x As Integer On Error GoTo cancel_kezelés
Application.EnableCancelKey = xlErrorHandler MsgBox "Ha unod, nyomd le a Ctrl+Break billentyűt!" For x = 1 To Next x cancel_kezelés: If Err = 18 Then MsgBox "Itt a vége!" End If End Sub
42
Eljárás adott számú argumentummal 19. feladat
Function összefűz(Sz1 As String, Optional Sz2) If IsMissing(Sz2) Then Sz2 = "---" összefűz = Sz1 & " " & Sz2 End Function Sub proba() Dim kiír As String kiír = összefűz("Excel", "programozás") MsgBox kiír End Sub
43
Eljárás előre nem ismert számú argumentummal 20. feladat
Function összeg(első As Double, ParamArray többi()) Dim részérték As Double Dim i As Integer részérték = első For i = LBound(többi) To UBound(többi) részérték = részérték + többi(i) Next i összeg = részérték End Function Sub proba() MsgBox (összeg(5, 4, 3, 5)) End Sub
44
Paraméterátadási módszerek
ByRef paraméter átadása referenciával ez az alapértelmezett átadási mód az argumentum módosulhat ByVal paraméter átadása érték szerint az argumentum nem módosulhat
45
ByRef – 21. feladat Sub ArgumentumÁtadásaByReference()
Dim Felhasználó_Neve As String Felhasználó_Neve = "Palkó" ChangeName Felhasználó_Neve MsgBox Felhasználó_Neve End Sub Sub ChangeName(ByRef Felhasználó_Neve) Felhasználó_Neve = "Józsi"
46
ByVal – 22. feladat Sub ArgumentumÁtadásaByValue()
Dim Felhasználó_Neve As String Felhasználó_Neve = "Palkó" ChangeName3 Felhasználó_Neve MsgBox "Még maradt a " & Felhasználó_Neve & " az eredeti makróból." End Sub Sub ChangeName3(ByVal Felhasználó_Neve) MsgBox "Az eredeti név " & Felhasználó_Neve & "." Felhasználó_Neve = "Józsi" MsgBox "A név megváltozott " & Felhasználó_Neve & _ " a meghívott makróban."
47
Események
48
Munkalap események BeforeDoubleClick Change Activate SelectionChange
Deactivate BeforeRightClick Calculate
49
A munkalapra kell bevinni!
BeforeDoubleClick Dupla kattintás valamelyik cellán. 23. feladat Private Sub Worksheet_BeforeDoubleClick(ByVal Target As _ Excel.Range, cancel As Boolean) MsgBox ("Duplán kattintottál a következő cellára: " _ & Target.Address) cancel = True ' Az alapértelmezett művelet nem hajtódik végre End Sub A munkalapra kell bevinni!
50
A munkalapra kell bevinni!
Change Érték beírása valamelyik cellába. 24. feladat Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox "Ezen a lapon megváltozott a következő cella:" _ & Target.Address End Sub A munkalapra kell bevinni!
51
A munkalapra kell bevinni!
Activate Kiválasztjuk a munkalapot. 25. feladat Private Sub Worksheet_Activate() MsgBox "Az aktív munkalap neve: " & ActiveSheet.Name End Sub, A munkalapra kell bevinni!
52
A munkalapra kell bevinni!
SelectionChange Tartomány kijelölése. 26. feladat Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = ' Kitöltőszín zöld Target.Borders.Color = vbBlue ' Szegélyszín kék End Sub A munkalapra kell bevinni!
53
A munkalapra kell bevinni!
Deactivate Elhagyjuk a munkalapot. 27. feladat Private Sub Worksheet_Deactivate() MsgBox ("Viszlát!") End Sub A munkalapra kell bevinni!
54
A munkalapra kell bevinni!
BeforeRightClick Kattintás a jobb egérgombbal. 28. feladat Private Sub Worksheet_BeforeRightClick _ (ByVal Target As Range, Cancel As Boolean) Target.Font.Bold = True Cancel = True End Sub A munkalapra kell bevinni!
55
A munkalapra kell bevinni!
Calculate Táblázat újraszámolása. 29. feladat Private Sub Worksheet_Calculate() MsgBox ("Most újraszámoltam a táblázat képleteit!") End Sub A munkalapra kell bevinni!
56
Munkafüzet események Activate BeforeClose BeforePrint BeforeSave
Deactivate NewSheet Open SheetBeforeDoubleClick SheetChange SheetSelectionChange SheetDeactivate SheetBeforeRightClick SheetActivate SheetCalculate
57
A munkafüzetbe (ThisWorkbook) kell bevinni!
NewSheet Új munkalap létrehozása. 30. feladat Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim név As String név = InputBox("Mi legyen az új munkalap neve?", _ "Munkalapnév", "Új munkalap") If név = "" Then név = "Névtelen" ActiveSheet.Name = név End Sub A munkafüzetbe (ThisWorkbook) kell bevinni!
58
A munkafüzetbe (ThisWorkbook) kell bevinni!
Open Munkafüzet megnyitása. 31. feladat Private Sub Workbook_Open() MsgBox "Dátum: " & Date & Chr(10) & "Idő: " & Time End Sub A munkafüzetbe (ThisWorkbook) kell bevinni!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.