Documente Academic
Documente Profesional
Documente Cultură
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
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])
14
A MsgBox Buttons paraméterei
Constant Value Description
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
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ó) abc
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!
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
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
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
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
49
Change
Érték beírása valamelyik cellába.
24. feladat
50
Activate
Kiválasztjuk a munkalapot.
25. feladat
51
SelectionChange
Tartomány kijelölése.
26. feladat
52
Deactivate
Elhagyjuk a munkalapot.
27. feladat
53
BeforeRightClick
Kattintás a jobb egérgombbal.
28. feladat
54
Calculate
Táblázat újraszámolása.
29. feladat
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
57
Open
Munkafüzet megnyitása.
31. feladat
58