User Tools

Site Tools


tanszek:oktatas:muszaki_informatika:vba_feladatok

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:muszaki_informatika:vba_feladatok [2024/04/23 18:43] – [Hogyan Működik?] kneheztanszek:oktatas:muszaki_informatika:vba_feladatok [2024/04/24 11:12] (current) – [Hogyan Működik?] knehez
Line 191: Line 191:
 End Sub End Sub
 </sxh> </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? ==== ==== Hogyan Működik? ====
  
Line 248: Line 240:
  
 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. 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.
 +
 +<sxh vb>
 +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
 +</sxh>
 +==== 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.
 +
 +====== 8. A kiválasztott cellák képéként másolása ======
 +Válasszunk ki egy tarományt amiben vannak értékek, majd futtassuk  a következő makrót:
 +<sxh vb>
 +Sub PasteAsPicture()
 +    Application.CutCopyMode = False
 +    Selection.Copy
 +    ActiveSheet.Pictures.Paste.Select
 +End Sub
 +</sxh>
 +
 +====== 9. Célkeresés ======
 +
 +Nagyon hasznos funkció, ha egy összetett képletek szerint változó cella értékét visszafelé akarjuk próbálgatni, hogy egy adott eredményhez jussunk.
 +
 +Például: adott egy számítás ami egy rendelés árát számolja ki, figyelembe véve az adót, a szállítási költséget.
 +
 +{{:tanszek:oktatas:muszaki_informatika:pasted:20240423-195630.png}}
 +
 +A példában 4000-ot kell fizetni az áruért. De mit tudunk csinálni ha csak **3500Ft** van kéznél? Valahogy visszafelé kellene számolni, hogy megtudjuk ekkor mekkora alap árat engedhetünk meg magunknak.
 +
 +<sxh vb>
 +Sub GoalSeek()
 +    Dim Target As Long
 +    
 +    On Error GoTo Errorhandler
 +    
 +    Target = InputBox("Enter the required value", "Enter Value")
 +    Worksheets("Tartalomjegyzék").Activate
 +    Rem ChangingCell = az alapár .... keressük az összesen = 'B5'-es cellát
 +    Rem
 +    With ActiveSheet.Range("B5")
 +        .GoalSeek _
 +        Goal:=Target, _
 +        ChangingCell:=Range("B1")
 +    End With
 +    
 +    Exit Sub
 +Errorhandler:     MsgBox ("Sorry, value is not valid.")
 +End Sub
 +</sxh>
 +
 +{{:tanszek:oktatas:muszaki_informatika:pasted:20240423-195725.png}}
 +
 +A példában a B5 helyére az //'Összesen'// melletti cella, a //ChangingCell// pedig az alapár (B1). 
 +
 +A szkript megadja hogy a 3500Ft-os bruttó ár, **787.40Ft**-os alapárhoz tartozik.
tanszek/oktatas/muszaki_informatika/vba_feladatok.1713897817.txt.gz · Last modified: 2024/04/23 18:43 by knehez