This is an old revision of the document!
−Table of Contents
1. Munkalapok neveinek listázása
Ez a feladat egy olyan makró létrehozását kéri, amely listázza az összes munkalap nevét egy adott munkafüzetben. Az alábbi makró bemutatja, hogyan lehet végrehajtani ezt a feladatot.
1 2 3 4 5 6 7 8 9 10 11 |
Sub MunkalapokListazasa() Dim ws As Worksheet Dim lista As String lista = "Munkalapok listája:" & vbCrLf For Each ws In ThisWorkbook.Worksheets lista = lista & ws.Name & vbCrLf Next ws MsgBox lista, vbInformation, "Munkalapok" End Sub |
Hogyan Működik?
- A
Sub MunkalapokListazasa()
egy eljárás, amely nem vár visszatérési értéket. Dim ws As Worksheet
- Egy változót deklarálunk, amely a munkafüzet minden egyes munkalapjára hivatkozik a ciklus során.Dim lista As String
- Egy szöveges változót hozunk létre, amelyben összegyűjtjük a munkalapok neveit.- A
For Each
ciklus végigmegy a jelenlegi munkafüzet összes munkalapján. - A
lista
változóhoz hozzáadjuk a munkalap nevét, majd egy új sort, hogy elkülönítsük a neveket. - Végül, a
MsgBox
függvény segítségével megjelenítjük az összegyűjtött munkalapneveket egy üzenetablakban.
2. Duplikált értékek keresése és kiemelése makróval
A feladat egy olyan makró létrehozása, amely megtalálja és kiemeli a duplikált értékeket egy adott tartományban az Excel munkalapon.
Sajnos függvénnyel nem lehet olyan cella paramétereit módosítani, ami más mint a függvény meghívásának cellája. Ezért a használat előtt ki kell jelölni azt a tartományt amit vizsgálni szeretnénk.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub DuplikaltakKiemelése() Dim tartomány As Range Set tartomány = Selection Dim cell As Range Dim ellenőrző As Object Set ellenőrző = CreateObject( "Scripting.Dictionary" ) ' A tartomány celláinak bejárása For Each cell In tartomány If Not cell.Value = "" Then If ellenőrző.Exists(cell.Value) Then ' Duplikált érték kiemelése piros háttérszínnel cell.Interior.Color = RGB(255, 0, 0) Else ellenőrző.Add cell.Value, Nothing End If End If Next cell End Sub |
Hogyan Működik?
- A makró először meghatározza a felhasználó által kijelölt tartományt a
Set tartomány = Selection
utasítással. - Egy
Scripting.Dictionary
objektumot hoz létre, amelyben csak különböző értékek tárolhatók. Itt található a részletes használata: https://learn.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/dictionary-object - Végigiterál a tartomány összes celláján.
- Ellenőrzi, hogy a cella értéke üres-e. Ha nem, megvizsgálja, hogy az érték szerepel-e már a Dictionary-ben.
- Ha az érték már szerepel (azaz duplikált), a cella hátterét pirosra színezi.
- Ha az érték még nem szerepel, hozzáadja a Dictionary-hoz.
3. Dinamikus Tartományok Kezelése
Ez a feladat egy makró létrehozását valósítja meg, amely képes dinamikusan kezelni és frissíteni egy tartomány méretét az aktív munkalapon.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub DinamikusTartomanyFrissites() Dim tartomany As Range Dim utolsoSor As Long , utolsoOszlop As Long Dim munkalap As Worksheet Set munkalap = ActiveSheet With munkalap utolsoSor = .Cells(.Rows.Count, "A" ). End (xlUp).Row utolsoOszlop = .Cells(1, .Columns.Count). End (xlToLeft).Column Set tartomany = .Range(.Cells(1, 1), .Cells(utolsoSor, utolsoOszlop)) End With tartomany. Select MsgBox "A dinamikus tartomány kijelölve: " & tartomany.Address, vbInformation, "Tartomány Frissítve" End Sub |
Hogyan Működik?
- A makró először beállítja a munkalapot az aktív munkalapra (`ActiveSheet`).
- Az
utolsoSor
ésutolsoOszlop
változókat használva megkeresi az utolsó nem üres cellát a “A” oszlopban és az 1. sorban, hogy meghatározza a tartomány határait. - Az `.End(xlUp).Row` és `.End(xlToLeft).Column` metódusok segítségével határozza meg az utolsó sor és oszlop számát.
- Ezután létrehoz egy `Range` objektumot, amely az első cellától (A1) az utolsó nem üres celláig tart.
- Végül kijelöli ezt a tartományt és megjelenít egy üzenetablakot, amely tájékoztatja a felhasználót a frissített tartomány címéről.
4. Munkalapok közötti adatátvitel
Ez a feladat egy makrót hoz létre, amely adatokat másol egyik munkalapról a másikra. A példa egyszerűsített, amely egy előre meghatározott tartomány adatait másolja át.
Ellenőrizzük, hogy van-e Munka1 és Munka2 elnevezésű munkalapunk. ha nincs hozzuk létre őket.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub AdatatvitelMunkalapokKozott() Dim forrasMunkalap As Worksheet Dim celMunkalap As Worksheet Dim masolandoTartomany As Range Dim celTartomany As Range ' Munkalapok és tartományok beállítása Set forrasMunkalap = ThisWorkbook.Sheets( "Munka1" ) Set celMunkalap = ThisWorkbook.Sheets( "Munka2" ) ' Másolandó tartomány beállítása a Forrás munkalapon Set masolandoTartomany = forrasMunkalap.Range( "A1:A10" ) ' A cél tartomány beállítása a Cél munkalapon ' Itt feltételezzük, hogy a cél tartomány azonos méretű és helyen van, mint a forrás Set celTartomany = celMunkalap.Range( "A1:A10" ) ' Adatok másolása masolandoTartomany.Copy Destination:=celTartomany MsgBox "Adatok átmásolva a '" & forrasMunkalap.Name & "' munkalapról a '" & celMunkalap.Name & "' munkalapra." , vbInformation, "Adatátvitel Kész" End Sub |
Hogyan Működik?
- Először is, beállítjuk a forrás és cél munkalapokat, ahol a forrás és cél munkalapok neveit közvetlenül a kódban adjuk meg.
- A másolandó tartományt beállítjuk a forrás munkalapon, itt az “A1:A10” tartományt használjuk példaként.
- Hasonlóképpen, megadjuk a cél tartományt a cél munkalapon, ami ebben az esetben azonos méretű és azonos helyen van, mint a forrás tartomány.
- A `.Copy` metódust használva másoljuk a forrás tartomány adatait a cél tartományba.
- Egy üzenetablak tájékoztatja a felhasználót az adatátvitel sikerességéről.
A VBA-ban a zárójelek használata opcionális, amikor szubrutinokat (Sub) hívunk meg, és nincsenek visszatérési értékek. Ha a szubrutin vagy függvény paramétereit közvetlenül adjuk meg anélkül, hogy változókat vagy kifejezéseket használnánk, akkor a zárójelek elhagyhatók. Például:
1 2 3 4 5 6 7 8 9 |
Sub ExampleSub(parameter As String ) MsgBox parameter End Sub ' Hívás zárójel nélkül ExampleSub "Hello World" ' Hívás zárójellel - általában akkor szükséges, ha az eredményt változóba kell menteni vagy kifejezés részeként használjuk Call ExampleSub( "Hello World" ) |
A := Jelölés a VBA-ban
A := jelölés a VBA-ban nevesített argumentumok (paraméterek) használatát teszi lehetővé függvények és eljárások hívásakor. Ez a szintaxis megengedi, hogy explicit módon megadjuk a paraméterek nevét és azokhoz tartozó értékeket, ami növeli a kód olvashatóságát és egyértelműségét, különösen akkor, ha a függvény vagy eljárás több paramétert is fogad.
Például:
1 2 3 4 5 6 7 8 9 |
Sub ExampleSubWithParams(firstParam As Integer , secondParam As String ) MsgBox "Érték: " & firstParam & ", Szöveg: " & secondParam End Sub ' Nevesített argumentumok használata Call ExampleSubWithParams(firstParam:=10, secondParam:= "Szöveg" ) ' vagy ExampleSubWithParams firstParam:=10, secondParam:= "Szöveg" |
5. Hibaellenőrzés és hibakezelés makrókban
Ebben a feladatban egy makró létrehozására mutatunk példát, amely megfelelő hibakezelést implementál a futásidő hibák láthatóvá tétele miatt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub HibakezelesMakroban() On Error GoTo Hibakezelo ' Itt történik a kód, ami hibát generálhat Dim osztando As Double Dim oszto As Double osztando = 10 oszto = 0 ' Ezzel a sorral osztásnál hibát generálunk Dim eredmeny As Double eredmeny = osztando / oszto ' Ez hibát okoz, ha az oszto 0 MsgBox "Az eredmény: " & eredmeny Exit Sub Hibakezelo: MsgBox "Hiba történt: " & Err.Description, vbCritical, "Hiba" ' Itt történhetnek további hibakezelési lépések, pl. naplózás End Sub |
Hogyan Működik?
- A makró a
On Error GoTo Hibakezelo
utasítással kezdődik, ami azt jelenti, hogy ha a makró futtatása során hiba történik, a vezérlés átugrik aHibakezelo
címkéhez. - A példában szándékosan generálunk egy hibát az osztásnál, ahol az osztó értéke 0.
- Ha ez a hiba megtörténik, a makró a
Hibakezelo
részre ugrik, ahol egy üzenetablakban megjelenik a hiba leírása. - Az
Exit Sub
utasítás biztosítja, hogy ha hiba nélkül eljutottunk a makró végére, ne ugorjunk a hibakezelő részre. - A hibakezelő részben lehetőség van további tevékenységekre, mint például a hiba naplózása vagy speciális hibakezelési rutinok végrehajtása.
Hogyan Működik?
- A makró a
On Error GoTo Hibakezelo
utasítással kezdődik, ami azt jelenti, hogy ha a makró futtatása során hiba történik, a vezérlés átugrik aHibakezelo
címkéhez. - A példában szándékosan generálunk egy hibát az osztásnál, ahol az osztó értéke 0.
- Ha ez a hiba megtörténik, a makró a
Hibakezelo
részre ugrik, ahol egy üzenetablakban megjelenik a hiba leírása. - Az
Exit Sub
utasítás biztosítja, hogy ha hiba nélkül eljutottunk a makró végére, ne ugorjunk a hibakezelő részre. - A hibakezelő részben lehetőség van további tevékenységekre, mint például a hiba naplózása vagy speciális hibakezelési rutinok végrehajtása.
Ez a makró alapvető hibakezelési technikát mutat be, amely elengedhetetlen bármilyen robosztus VBA alkalmazás vagy makró fejlesztésekor, hogy a végfelhasználók számára kezelhető hibaüzeneteket biztosíthassunk.
6. Dinamikus Diagramok Készítése
A makró lehetőséget ad arra, hogy a felhasználók automatikusan frissülő diagramokat hozzanak létre, amelyek megváltoznak, amint az adatok frissülnek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Sub CreateDynamicChart() Dim ws As Worksheet Dim chartObj As ChartObject Dim lastRow As Long Dim dataRange As Range ' Munkalap beállítása Set ws = ThisWorkbook.Sheets( "Munka1" ) ' Az utolsó adatsor megkeresése lastRow = ws.Cells(ws.Rows.Count, "A" ). End (xlUp).Row ' Dinamikus adattartomány létrehozása Set dataRange = ws.Range( "A1:B" & lastRow) ws.Names.Add Name:= "DynamicData" , RefersTo:=dataRange ' Diagram létrehozása a munkalapon Set chartObj = ws.ChartObjects.Add(Left:=200, Width:=375, Top:=50, Height:=225) With chartObj.Chart ' Diagram adatforrás beállítása a dinamikus tartományra .SetSourceData Source:=ws.Range( "DynamicData" ) .ChartType = xlLine ' Vonal diagram beállítása .HasTitle = True .ChartTitle.Text = "Dinamikus Adatok Ábrázolása" End With End Sub |
Hogyan Működik?
- A makró meghatározza a dinamikus adattartományt az “A” oszlopból a munkalap utolsó soráig.
- Egy új diagramobjektumot hoz létre, és beállítja a diagram adatforrását a korábban meghatározott dinamikus tartományra.
- A diagram típusát vonaldiagramra állítja, és címet ad hozzá.
Ez a makró jó alapja lehet bonyolultabb dinamikus diagramok létrehozásának is, ahol további formázási és adatkezelési lehetőségek is használhatók.
7. Automatikus tartalomjegyzék készítése
Írjuk egy makrót, ami egy tartalomjegyzéket készít a munkafüzet összes munkalapjáról az első munkalap helyén, hozzáadva egy új munkalapot, amit Tartalomjegyzék-nek nevez el, és beilleszti a munkalapok hivatkozásait.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub Tartalomjegyzek() Dim i As Long On Error Resume Next Application.DisplayAlerts = False Worksheets( "Tartalomjegyzék" ).Delete Application.DisplayAlerts = True ThisWorkbook.Sheets.Add Before:=ThisWorkbook.Worksheets(1) ActiveSheet.Name = "Tartalomjegyzék" For i = 1 To Sheets.Count With ActiveSheet .Hyperlinks.Add _ Anchor:=ActiveSheet.Cells(i, 1), _ Address:= "" , _ SubAddress:= "'" & Sheets(i).Name & "'!A1" , _ ScreenTip:=Sheets(i).Name, _ TextToDisplay:=Sheets(i).Name End With Next i End Sub |
Hogyan Működik?
- Hiba Kezelés: On Error Resume Next parancs utasítja a VBA-t, hogy folytassa a futást, ha hiba történik a makró futtatása során.
- Figyelmeztetések Kikapcsolása: Application.DisplayAlerts = False utasítással kikapcsolja az Excel automatikus figyelmeztetéseit (felugró ablakait), például amikor egy munkalapot törölni szeretnénk.