Felhasználói eszközök

Eszközök a webhelyen


tanszek:oktatas:muszaki_informatika:vba_feladatok

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Következő változat
Előző változat
tanszek:oktatas:muszaki_informatika:vba_feladatok [2024/02/22 10:25]
knehez létrehozva
tanszek:oktatas:muszaki_informatika:vba_feladatok [2024/02/22 17:05] (aktuális)
knehez [5. Hibaellenőrzés és hibakezelés makrókban]
Sor 1: Sor 1:
-====== 1. Munkalap Neveinek Listázása ​======+====== 1. Munkalapok neveinek listázása ​======
  
 Ez a feladat egy olyan makró létrehozását kérte, amely listázza az összes munkalap nevét egy adott munkafüzetben. Az alábbi makró bemutatja, hogyan lehet végrehajtani ezt a feladatot. Ez a feladat egy olyan makró létrehozását kérte, amely listázza az összes munkalap nevét egy adott munkafüzetben. Az alábbi makró bemutatja, hogyan lehet végrehajtani ezt a feladatot.
Sor 27: Sor 27:
  
  
 +====== 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.
 +
 +<sxh vb>
 +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
 +</​sxh>​
 +
 +==== 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.
 +  * 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.
 +
 +<sxh vb>
 +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
 +</​sxh>​
 +
 +==== Hogyan Működik? ====
 +
 +  - A makró először beállítja a munkalapot az aktív munkalapra (`ActiveSheet`).
 +  - Az ''​utolsoSor''​ és ''​utolsoOszlop''​ 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.
 +
 +<sxh vb>
 +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
 +</​sxh>​
 +
 +==== 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:
 +
 +<sxh vb>
 +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"​)
 +</​sxh>​
 +
 +**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:
 +<sxh vb>
 +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"​
 +</​sxh>​
 +
 +====== 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. ​
 +
 +<sxh vb>
 +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
 +</​sxh>​
 +==== 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 a ''​Hibakezelo''​ 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 a ''​Hibakezelo''​ 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.
  
tanszek/oktatas/muszaki_informatika/vba_feladatok.1708597558.txt.gz · Utolsó módosítás: 2024/02/22 10:25 szerkesztette: knehez