You are on page 1of 58

Az Excel programozsa

Elad: des Pter


http://epeter.hu

Visual Basic
Visual Basic - VB

nll Windows alkalmazsok ksztse esemnyvezrelt programkd a VB bizonyos rszeit tartalmazza a programot valamely Office alkalmazs futtatja - makr

Visual Basic for Applications - VBA

Objektummodell
Objektum (object) Az Excel alkotelemei az objektumok (pl. munkafzet, munkalap, stb.) Objektumgyjtemny (collection) A tbb pldnyban elfordul, azonos tpus objektumok gyjtemnyt alkotnak. Tulajdonsg (properties) az objektum viselkedsmdjt, megjelensi formjt (szn, mret, stb.) hatrozzk meg Metdus (method) az objektumok mveleteinek sszefoglal neve (pl. Add, Open, Close, PrintOut, stb.)
3

Workbooks gyjtemny
Alt+F11 (VBE), Nzet (View) - Prbaablak (Immediate)

wokbooks.Add

j munkafzet hozzadsa

?workbooks.Count

munkafzetek szmnak kirsa


sszes munkafzet bezrsa Munkafzet1 bezrsa
4

workbooks.Close

workbooks(Munkafzet1).Close

Worksheets gyjtemny
Worksheets.Add j munkalap beszrsa ?Worksheets(1).Name kirja az aktv munkafzet els munkalapjnak nevt Worksheets(1).Name=Els az aktv munkafzet els munkalapjnak nevt Els re vltoztatja Worksheets(Els).Move after:=worksheets(3) az Els nev munkalapot tmozgatja a 3. utn

Tartomnyok s cellk
Cells(3,2).Select kivlasztja a B3-as cellt Cells(3,2)=25% a B3 cellba berja a 25%-ot Range(B2:C10).Select kijelli a B2:C10 tartomnyt Range(B2:C10)=Excel a B2:C10 tartomny minden celljba berja az Excel szveget ?Range(B5) megjelenti a B5 cella tartalmt
6

Makr ltrehozsa rgztssel

1. feladat Makr rgztse


Hozzunk ltre egy makrt, amely az aktv cellba

elhelyezi a mai dtumot, Arial, 20p magas, kk szn betkkel! A makr a Ctlr+M billentykombincival is legyen elindthat!

Adattpusok
Adattpus
Boolean Integer Long Single Double Igaz-Hamis Egsz szm (2bjt) Hossz egsz (4bjt) Tizedestrt (4bjt) Tizedestrt (8bjt) % & ! #

Adat

Jel

Currency
Date Object String

Pnznem
Dtum Objektum Szveg

$
9

Array

Tmb

Vltoz definilsa
Nem ktelez, de ajnlott. A Modul els sorba bert Option Explicit sorral ktelezv tehetjk.

Dim Vltoz As String Dim V1, V2, V3 As Integer Dim Nv As String* 15 Dim Lap As Worksheet Felhasznli tpus
Type Adataim Nv As String letkor As Integer End Type Dim Dolgoz As Adataim
10

Vltozk hatkre
Public (rgebben Global)

Modulszint, a modul tetejn kell definilni.


Dim

Modulszint, vagy eljrsszint.


Static

Csak eljrson bell definilhat.

11

Mveletek
Aritmetikai

+ - * / ^ Mod
Not, And, Or, Xor, Eqv < > = <= >= <>

Logikai

Relcis

Szveg

& (konkatenci)
12

2. feladat
Jelentsk meg kt szm sszegt! 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

13

zenet megjelentse - MsgBox


MsgBox(prompt[,buttons][,title])
Prompt: a kirand zenet Buttons: nyomgombok s szimblumok Title: a prbeszdablak cme

14

A MsgBox Buttons paramterei


Constant Value Description

vbOKOnly
vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3

0
1 2 3 4 5 16 32 48 64 0 256 512

OK button only (default)


OK and Cancel buttons Abort, Retry, and Ignore buttons Yes, No, and Cancel buttons Yes and No buttons Retry and Cancel buttons Critical message Warning query Warning message Information message (X) (?) (!) (i)

First button is default (default) Second button is default Third button is default

vbDefaultButton4

768

Fourth button is default

15

A MsgBox visszaadott rtkei


Constant vbOK vbCancel Value 1 2 Description OK button pressed Cancel button pressed

vbAbort
vbRetry vbIgnore vbYes vbNo

3
4 5 6 7

Abort button pressed


Retry button pressed Ignore button pressed Yes button pressed No button pressed
16

3. feladat
Jelentsnk meg egy krds ablakot igen s nem gombokkal! Sub Krds() Dim Vlasz As Integer Vlasz = MsgBox("Szereted a szmtgpet?", vbQuestion + vbYesNo, "Fontos") If Vlasz = vbYes Then MsgBox ("Akkor j!") Else MsgBox ("Sajnlom!") End If End Sub

17

Adat beolvassa - InputBox


Vltoz = InputBox(zenet, Cm, Alaprtk)
zenet: ez a szveg jelenik meg az ablakban Cm: az ablak cmsornak felirata Alaprtk: alaprtelmezett rtk

18

4. feladat
rassuk ki egy ngyzet kerlett, terlett
Sub ngyzet() Dim a, K, T As Double Dim Kirand As String a = Cdbl(InputBox("Krem az a oldal hosszt!", "Ngyzet", 10)) K=4*a T=a^2 Kirand = "K = " & K & Chr(10) & "T = " & T MsgBox (Kirand) End Sub

19

5. feladat
rassuk ki egy hromszg kerlett, terlett
Sub hromszg() Dim a, b, c, K, T, s As Double a = CDbl(InputBox("Krem az a oldal hosszt!", "Hromszg", 1)) b = CDbl(InputBox("Krem a b oldal hosszt!", "Hromszg", 1)) c = CDbl(InputBox("Krem a c oldal hosszt!", "Hromszg", 1)) K=a+b+c Heron kplet s=K/2 T s ( s a )(s b)(s c) T = Sqr(s * (s - a) * (s - b) * (s - c)) Kirand = "K = " & K & Chr(10) & "T = " & T ahol MsgBox (Kirand) abc s End Sub 2
20

Vezrlsi szerkezetek
Ugrs (GoTo)

Feltteles elgazs (If)


Tbbirny elgazs (Select Case) Cikluskpzs

DoLoop For Next For Each Next While


21

6. feladat - GoTo
Szmtsuk ki a kr kerlett, terlett.
Sub kr() Dim r, K, T, Pi As Double Dim Kirand As String Pi = Application.Pi() Adatbekrs: r = CDbl(InputBox("Krem a kr sugart!", "Kr", 1)) If r <= 0 Then MsgBox ("A kr sugara nem lehet negatv, vagy 0!") GoTo Adatbekrs Else K = 2 * r * Pi T = r ^ 2 * Pi Kirand = "K = " & K & Chr(10) & "T = " & T MsgBox (Kirand) End If End Sub

22

Feltteles elgazs
If felttel Then
parancsok

If felttel Then
parancsok

Else
parancsok

ElseIf felttel2 Then


parancsok

End If

Else
parancsok

End If

23

7. feladat
Olvassunk be egy szmot, s llaptsuk meg, hogy pozitv-e.
Sub pozitv() Dim szm As Double szm = CDbl(InputBox("Krek egy szmot!", "Szmvizsgl")) If szm > 0 Then MsgBox ("Ez a szm pozitv!") ElseIf szm < 0 Then MsgBox ("Ez a szm negatv!") Else MsgBox ("Ez a szm a nulla") End If End Sub
24

Tbbirny elgazs
Select Case rtk
Case vizsglat1
parancsok1

Case vizsglat2
parancsok2

Case vizsglatn
parancsokn

Case else
parancsok_else

End Select
25

Sub dolgozat() Dim pontszm As Integer pontszm = CInt(InputBox("Krem a pontszmot!", "Dolgozat")) Select Case pontszm Case 72 To 80 Vgezzk el egy MsgBox ("Jeles") dolgozat rtkelst! Case 64 To 71 MsgBox ("J") Case 56 To 63 72-80 Jeles MsgBox ("Kzepes") 64-71 J Case 48 To 55 MsgBox ("Elgsges") 56-63 Kzepes Case 0 To 47 48-55 Elgsges MsgBox ("Elgtelen") 0-47 Elgtelen Case Else MsgBox ("Nemltez pontszm") End Select End Sub

8. feladat

26

Do Loop ciklus - While


A ciklus addig fut, amg a felttel igaz. Do While felttel Ell tesztel
ciklusmag

Loop Do
ciklusmag

Loop While felttel

Htul tesztel
27

9. feladat
Az A1:A100 tartomnyt tltsk fel szmokkal!
Sub DoLoop_1() Dim i As Integer i=1 Do While i <= 100 Cells(i, 1) = i i=i+1 Loop End Sub

28

10. feladat
Olvassunk be egy 100-nl kisebb pozitv szmot, s troljuk az A1-es cellban a szm kbgykt!
Sub kbgyk() Dim x As Double Do x = CDbl(InputBox("Krem a szmot!", "Kbgyk")) Loop While x <= 0 Or x >= 100 Range("A1") = x ^ (1 / 3) End Sub
29

Do Loop ciklus - Until


A ciklus addig fut, amg a felttel hamis. Do Until felttel Ell tesztel
ciklusmag

Loop Do
ciklusmag

Loop Until felttel

Htul tesztel
30

11. feladat
Az A1:J1 tartomnyba rjuk fel 2 hatvnyait (1-tl 10-ig)!
Sub hatvnyok() Dim x As Integer x=1 Do Until x > 10 Cells(1, x) = 2 ^ x x=x+1 Loop End Sub
31

12. feladat
Szmtsuk ki a felhasznl letkort!
Sub letkor() Dim napok As Integer Dim szldtum As Date Do szldtum = CDate(InputBox("Add meg a szletsi dtumod!", "letkor")) Loop Until szldtum < Date napok = Date - szldtum MsgBox ("letkorod: " & napok & " nap") End Sub
32

For Next
Elre tudjuk, hogy hnyszor kell lefuttatni a ciklusmagot! For i = kezdrtk To vgrtk Step lpskz
ciklusmag

Next i

33

13. feladat
Olvassunk be 5 szmot, s rassuk ki a szorzatukat!
Sub szorzat() Dim szm, szorzat As Double Dim i As Integer szorzat = 1 For i = 1 To 5 szm = CDbl(InputBox("Krem a(z) " & i & ". szmot", "Szorzat")) szorzat = szorzat * szm Next i MsgBox ("Az t szm szorzata = " & szorzat) End Sub

34

For Each Next


Egy objektumgyjtemny minden egyes elemn egy parancsszrit hajt vgre.

14. feladat
Zrjuk be az sszes munkafzetet!
Sub bezr() Dim munkafzet As Variant For Each munkafzet In Application.Workbooks munkafzet.Close Next munkafzet End Sub
35

Exit Do

Kilps Do Loop ciklusbl

Sub kilp_Do() Dim sorszmll, folytats As Integer Worksheets(1).Select Worksheets(1).Cells(5, 1).Value = 77 sorszmll = 1 Do Cells(sorszmll, 1).Select If Cells(sorszmll, 1).Value = 77 Then MsgBox ("Megtalltuk a 77-et tartalmaz cellt!") Exit Do End If sorszmll = sorszmll + 1 folytats = MsgBox("Folytassuk a keresst?", vbYesNo) Loop While folytats = vbYes End Sub

36

Exit For

Kilps For Next ciklusbl

Sub Keres() Dim zenet, Szveg As String Dim karakter As Integer ' A program megadja egy szvegben az r bet pozcijt. zenet = "Adj be egy szveget, megadom az r bet pozcijt!" Szveg = LCase(InputBox(zenet, "R bet keress")) For karakter = 1 To Len(Szveg) If Mid(Szveg, karakter, 1) = "r" Then MsgBox ("A(z) " & karakter & "." & "pozciban" _ & " r" & " bet van!") Exit For End If Next karakter End Sub
37

While
A ciklus akkor fut le, ha a vizsglt felttel igaz. While felttel
utastsok

Wend

38

17. feladat
'Az eredmny lthat: Nzet men Prba ablak-ban... '(View/Immediate Window) Sub WHILE1() Dim szmll As Integer szmll = 0

While szmll < 10 szmll = szmll + 1 Wend Debug.Print "Szmll rtke"; szmll ' 10 lthat a Debug ablakban. End Sub
39

Vtelen ciklus
Program lelltsa
Esc (Ctrl+Alt+Del)

Egyni kezels:
Application.EnableCancelKey=
xlDisabled A megszakts nem lehetsges. xlInterrupt A megszakts lehetsges. xlErrorHandler Egyni hibakezels.

40

18. feladat
Sub hiba() Dim x As Integer On Error GoTo cancel_kezels Application.EnableCancelKey = xlErrorHandler MsgBox "Ha unod, nyomd le a Ctrl+Break billentyt!" For x = 1 To 1000000000 Next x cancel_kezels: If Err = 18 Then MsgBox "Itt a vge!" End If End Sub
41

Eljrs adott szm argumentummal 19. feladat


Function sszefz(Sz1 As String, Optional Sz2) If IsMissing(Sz2) Then Sz2 = "---" sszefz = Sz1 & " " & Sz2 End Function Sub proba() Dim kir As String kir = sszefz("Excel", "programozs") MsgBox kir End Sub

42

Eljrs elre nem ismert szm argumentummal 20. feladat


Function sszeg(els As Double, ParamArray tbbi()) Dim rszrtk As Double Dim i As Integer rszrtk = els For i = LBound(tbbi) To UBound(tbbi) rszrtk = rszrtk + tbbi(i) Next i sszeg = rszrtk End Function
Sub proba() MsgBox (sszeg(5, 4, 3, 5)) End Sub
43

Paramtertadsi mdszerek
ByRef

paramter tadsa referencival ez az alaprtelmezett tadsi md az argumentum mdosulhat


paramter tadsa rtk szerint az argumentum nem mdosulhat

ByVal

44

ByRef 21. feladat


Sub ArgumentumtadsaByReference() Dim Felhasznl_Neve As String Felhasznl_Neve = "Palk" ChangeName Felhasznl_Neve MsgBox Felhasznl_Neve End Sub Sub ChangeName(ByRef Felhasznl_Neve) Felhasznl_Neve = "Jzsi" End Sub

45

ByVal 22. feladat


Sub ArgumentumtadsaByValue() Dim Felhasznl_Neve As String Felhasznl_Neve = "Palk" ChangeName3 Felhasznl_Neve MsgBox "Mg maradt a " & Felhasznl_Neve & " az eredeti makrbl." End Sub Sub ChangeName3(ByVal Felhasznl_Neve) MsgBox "Az eredeti nv " & Felhasznl_Neve & "." Felhasznl_Neve = "Jzsi" MsgBox "A nv megvltozott " & Felhasznl_Neve & _ " a meghvott makrban." End Sub

46

Esemnyek

47

Munkalap esemnyek
BeforeDoubleClick Change

Activate
SelectionChange Deactivate BeforeRightClick Calculate

48

BeforeDoubleClick
Dupla kattints valamelyik celln.

23. feladat
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As _ Excel.Range, cancel As Boolean) MsgBox ("Dupln kattintottl a kvetkez cellra: " _ & Target.Address) cancel = True ' Az alaprtelmezett mvelet nem hajtdik vgre End Sub
A munkalapra kell bevinni!

49

Change
rtk bersa valamelyik cellba. 24. feladat
Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox "Ezen a lapon megvltozott a kvetkez cella:" _ & Target.Address End Sub
A munkalapra kell bevinni!

50

Activate
Kivlasztjuk a munkalapot. 25. feladat
Private Sub Worksheet_Activate() MsgBox "Az aktv munkalap neve: " & ActiveSheet.Name End Sub,

A munkalapra kell bevinni!

51

SelectionChange
Tartomny kijellse. 26. feladat
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = 4 ' Kitltszn zld Target.Borders.Color = vbBlue ' Szeglyszn kk End Sub
A munkalapra kell bevinni!

52

Deactivate
Elhagyjuk a munkalapot. 27. feladat
Private Sub Worksheet_Deactivate() MsgBox ("Viszlt!") End Sub

A munkalapra kell bevinni!

53

BeforeRightClick
Kattints a jobb egrgombbal. 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!
54

Calculate
Tblzat jraszmolsa. 29. feladat
Private Sub Worksheet_Calculate() MsgBox ("Most jraszmoltam a tblzat kpleteit!") End Sub

A munkalapra kell bevinni!


55

Munkafzet esemnyek
Activate BeforeClose BeforePrint BeforeSave Deactivate NewSheet Open SheetBeforeDoubleClick SheetChange SheetSelectionChange SheetDeactivate SheetBeforeRightClick SheetActivate SheetCalculate

56

NewSheet
j munkalap ltrehozsa. 30. feladat
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim nv As String nv = InputBox("Mi legyen az j munkalap neve?", _ "Munkalapnv", "j munkalap") If nv = "" Then nv = "Nvtelen" ActiveSheet.Name = nv End Sub
A munkafzetbe (ThisWorkbook) kell bevinni!
57

Open
Munkafzet megnyitsa. 31. feladat
Private Sub Workbook_Open() MsgBox "Dtum: " & Date & Chr(10) & "Id: " & Time End Sub

A munkafzetbe (ThisWorkbook) kell bevinni!


58

You might also like