Professional Documents
Culture Documents
Visual Basic
Visual Basic - VB
nll Windows alkalmazsok ksztse esemnyvezrelt programkd a VB bizonyos rszeit tartalmazza a programot valamely Office alkalmazs futtatja - makr
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
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
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)
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
14
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
First button is default (default) Second button is default Third button is default
vbDefaultButton4
768
15
vbAbort
vbRetry vbIgnore vbYes vbNo
3
4 5 6 7
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
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)
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
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
Loop Do
ciklusmag
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
Loop Do
ciklusmag
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
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
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
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
42
Paramtertadsi mdszerek
ByRef
ByVal
44
45
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,
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
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
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