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/14 14:31] – [Hogyan Működik?] kissatanszek:oktatas:muszaki_informatika:vba_feladatok [2024/04/24 11:12] (current) – [Hogyan Működik?] knehez
Line 198: Line 198:
   * 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.   * 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.   * 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.
 +
 +<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? ==== ==== 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á.
  
-  * 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. +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.
-  * 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 makró alapvető hibakezelési technikát mutat beamely 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.+====== 7. Automatikus tartalomjegyzék készítése ====== 
 + 
 +Írjuk egy makrót, ami egy tartalomjegyzéket készít munkafüzet összes munkalapjáról az első munkalap helyénhozzá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 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.1713105060.txt.gz · Last modified: 2024/04/14 14:31 by kissa