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/02/22 15:13] – [Hogyan Működik?] kneheztanszek:oktatas:muszaki_informatika:vba_feladatok [2024/04/24 11:12] (current) – [Hogyan Működik?] knehez
Line 1: Line 1:
 ====== 1. Munkalapok 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é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.
  
 <sxh vb> <sxh vb>
Line 58: Line 58:
  
   * A makró először meghatározza a felhasználó által kijelölt tartományt a ''Set tartomány = Selection'' utasítással.   * 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.+  * 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.   * 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.   * Ellenőrzi, hogy a cella értéke üres-e. Ha nem, megvizsgálja, hogy az érték szerepel-e már a Dictionary-ben.
Line 166: Line 166:
 </sxh> </sxh>
  
-====== 5. Hibaellenőrzés és Hibakezelés Makrókban ======+====== 5. Hibaellenőrzés és hibakezelés makrókban ======
  
-Ez feladat egy makró létrehozását kérte, amely megfelelő hibakezelést implementál a futásidő hibák elkerülése érdekében. A következő példa egy egyszerű hibakezelési módszert mutat be, amely segít a hibák kezelésében a VBA makrókban.+Ebben 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> <sxh vb>
Line 191: Line 191:
 End Sub End Sub
 </sxh> </sxh>
- 
 ==== Hogyan Működik? ==== ==== Hogyan Működik? ====
  
Line 202: Line 201:
 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. 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.
 +
 +<sxh vb>
 +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
 +</sxh>
 +
 +==== 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.
 +
 +<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.1708614839.txt.gz · Last modified: 2024/02/22 15:13 by knehez