Sunteți pe pagina 1din 58

Az Excel programozása

Előadó: Édes Péter


http://epeter.hu

1
Visual Basic
 Visual Basic - VB
 ö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ó

2
Objektummodell
 Objektum (object)
 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.)

3
Workbooks gyűjtemény
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
4
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

5
Tartományok és cellák
 Cells(3,2).Select
 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

6
Makró létrehozása rögzítéssel

7
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ó!

8
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
9
Változó definiálása
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
10
Változók hatóköre

 Public (régebben Global)


Modulszintű, a modul tetején kell definiálni.
 Dim
Modulszintű, vagy eljárásszintű.
 Static
Csak eljáráson belül definiálható.

11
Műveletek
 Aritmetikai
 + - * / ^ Mod
 Logikai
 Not, And, Or, Xor, Eqv
 Relációs
 < > = <= >= <>
 Szöveg
 & (konkatenáció)

12
2. feladat
Jelenítsük meg két szám összegét!

Sub Összeg()
Dim A, B, Össz As Integer
A = 10 A = Range("A1")
B = 20 B = Range("A2")
Össz = A + B
MsgBox (A & "+" & B & "=" & Össz)
End Sub
Range("A3") = Össz

13
Ü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

14
A MsgBox Buttons paraméterei
Constant Value Description

vbOKOnly 0 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 0 First button is default (default)
vbDefaultButton2 256 Second button is default
vbDefaultButton3 512 Third button is default
15
vbDefaultButton4 768 Fourth button is default
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
16
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 17
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

18
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

19
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 Heron képlet
s=K/2
T = Sqr(s * (s - a) * (s - b) * (s - c)) T  s ( s  a )(s  b)(s  c)
Kiírandó = "K = " & K & Chr(10) & "T = " & T ahol
MsgBox (Kiírandó) abc
s
End Sub 2

20
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

21
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
22
End Sub
Feltételes elágazás
If feltétel Then If feltétel Then
parancsok parancsok
Else ElseIf feltétel2 Then
parancsok parancsok
End If Else
parancsok
End If

23
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

24
Többirányú elágazás
Select Case érték
Case vizsgálat1
parancsok1
Case vizsgálat2
parancsok2

Case vizsgálatn
parancsokn
Case else
parancsok_else
End Select
25
Sub dolgozat()
Dim pontszám As Integer 8. feladat
pontszám = CInt(InputBox("Kérem a pontszámot!", "Dolgozat"))
Select Case pontszám
Case 72 To 80
MsgBox ("Jeles") Végezzük el egy
Case 64 To 71 dolgozat értékelését!
MsgBox ("Jó")
Case 56 To 63
72-80 Jeles
MsgBox ("Közepes")
Case 48 To 55 64-71 Jó
MsgBox ("Elégséges") 56-63 Közepes
Case 0 To 47
48-55 Elégséges
MsgBox ("Elégtelen")
Case Else 0-47 Elégtelen
MsgBox ("Nemlétező pontszám")
End Select
End Sub
26
Do … Loop ciklus - While
A ciklus addig fut, amíg a feltétel igaz.
Do While feltétel ‘Elől tesztel
ciklusmag
Loop

Do
ciklusmag
Loop While feltétel ‘Hátul tesztel

27
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

28
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

29
Do … Loop ciklus - Until
A ciklus addig fut, amíg a feltétel hamis.
Do Until feltétel ‘Elől tesztel
ciklusmag
Loop

Do
ciklusmag
Loop Until feltétel ‘Hátul tesztel

30
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
31
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

32
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

33
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

34
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

35
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
36
End Sub
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
37
While
A ciklus akkor fut le, ha a vizsgált feltétel igaz.

While feltétel
utasítások
Wend

38
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
39
Vételen ciklus
Program leállítása
Esc (Ctrl+Alt+Del)
Egyéni kezelés:
Application.EnableCancelKey= …
xlDisabled – A megszakítás nem lehetséges.
xlInterrupt – A megszakítás lehetséges.
xlErrorHandler – Egyéni hibakezelés.

40
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 1000000000
Next x

cancel_kezelés:
If Err = 18 Then
MsgBox "Itt a vége!"
End If
End Sub
41
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

42
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
43
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

44
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"
End Sub

45
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."
End Sub 46
Események

47
Munkalap események

 BeforeDoubleClick
 Change
 Activate
 SelectionChange
 Deactivate
 BeforeRightClick
 Calculate

48
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!

49
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!

50
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!

51
SelectionChange
Tartomány kijelölése.

26. feladat

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Target.Interior.ColorIndex = 4 ' Kitöltőszín zöld
Target.Borders.Color = vbBlue ' Szegélyszín kék
End Sub

A munkalapra kell bevinni!

52
Deactivate
Elhagyjuk a munkalapot.

27. feladat

Private Sub Worksheet_Deactivate()


MsgBox ("Viszlát!")
End Sub

A munkalapra kell bevinni!

53
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!

54
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!

55
Munkafüzet események
 Activate  SheetBeforeDoubleClick
 BeforeClose  SheetChange
 BeforePrint  SheetSelectionChange
 BeforeSave  SheetDeactivate
 Deactivate  SheetBeforeRightClick
 NewSheet  SheetActivate
 Open  SheetCalculate

56
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!

57
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!

58

S-ar putea să vă placă și