Deprecated: Joomla\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 41

Deprecated: Return type of Joomla\Input\Input::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 170

Deprecated: Joomla\CMS\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Input.php on line 31

Deprecated: Joomla\CMS\Input\Cookie implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Cookie.php on line 0

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /home/adatpcom/public_html/libraries/src/Uri/Uri.php on line 141
Excel makró - Tartalomjegyzék készítése

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21
Excel makró - Tartalomjegyzék készítése

Excel makró - Tartalomjegyzék készítése

Gyakran előfordul, hogy sok munkalappal kell dolgoznunk Excelben. Ezek között egyre ügyesebben lehet navigálni (pl. Kereső vagy Ctrl+PgUp, Ctrl+PgDown), de egy komoly munkához már igény lehet valamiféle tartalomjegyzék. A következőkben egy olyan makrót írunk, amely készít egyet számunkra!

Hogyan néz ki a logikai váza ennek a makrónak?

  • Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.
  • Kérdezze meg a felhasználótól, mi legyen ennek a munkalapnak a neve és adja neki ezt a nevet!
  • Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.
  • A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.
  • Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?
  • Ha igen, kérdezze meg, mi legyen a szöveg?
  • Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.
  • Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat, hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.

A működési logika áttekintése után kezdjünk neki a kódírásnak! Használhatunk hozzá akár egyszerű Jegyzettömböt is, de inkább az Excel makrószerkesztő felületét javaslom vagy akár egy bővített funkcionalitású szövegszerkesztő használatát, mint pl. a Notepad++.

Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

End Sub

A makró keretét a Sub [makró neve]() és End Sub kifejezések adják, e kettő közé kerül majd minden további kód. Rögtön a makró neve után érdemes néhány sort írni arról, hogy mire való ez a makró, milyen körülmények között lehet használni. Mivel nem szeretnénk, hogy futtatáskor ez végrehajtásra kerüljön (hiszen nem is végrehajtható kód), ezért kommentté tesszük egy sor eleji aposztróf segítségével.

Következő lépésben írjuk bele a logikai vázlatunkat kommentek formájában. Nem biztos, hogy a kód logikája is ezt a sorrendet fogja követni, de segít abban, hogy átlássuk, mit szeretnénk csinálni, hogy milyen kódot kell még megírnunk. Ezek mentén pedig darabolni is tudjuk a feladatot, hogy ne akarjuk egyszerre megcsinálni az egészet, hanem egyszerre mindig csak egy kicsi, teljesíthető részletre koncentráljunk, így kis lépésenként egyszer csak eljutunk a célig.

Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

'Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.'

'Kérdezze meg a felhasználótól, mi legyen ennek a munkalapnak a neve és adja neki ezt a nevet!'

'Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.'

'A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.'

'Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?'

'Ha igen, kérdezze meg, mi legyen a szöveg?'

'Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.'

'Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat,'
'hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.'

End Sub

Szükség lesz egy olyan lépésre is, amely a logikai vázlatunkban nem jelent meg, viszont programozási szempontból fontos: ez a változók definiálása. Ezt a részt nem egy szuszra fogjuk feltölteni, hanem a többi részlet kidolgozása során töltjük majd fel, ahogy sorra előkerülnek változók. Az első változóban (sheetName) majd a létrehozandó munkalap nevét szeretnénk eltárolni, értékét pedig a felhasználó adja majd meg.

A makró zökkenőmentesebb futása érdekében a korábban felvázolt ívet már az elején módosítjuk: előbb kérdezzük meg a létrehozandó munkalap nevét (ezt fogjuk eltárolni az első változónkban), s csak utána hozzuk létre és nevezzük át. Így a későbbi felhasználó számára azonnal az új, általa megadott névvel jelenik meg a munkalap. (Ezt a változást a kommentekben is átvezetjük, hogy továbbra is logikus maradjon a kód magyarázata.) Az adatbekérést InputBox segítségével oldjuk meg:

Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

'Változók definiálása'
Dim sheetName As String

'Kérdezze meg a felhasználótól, mi legyen a tartalomjegyzék munkalapjának a neve!'
sheetName = InputBox("Mi legyen a tartalomjegyzék munkalapjának neve?", "Tartalomjegyzék munkalapjának neve")

'Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.'

'Adja az új munkalapnak a felhasználó által megadott nevet!'

'Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.'

'A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.'

'Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?'

'Ha igen, kérdezze meg, mi legyen a szöveg?'

'Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.'

'Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat,'
'hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.'

End Sub

A második lépéshez nincs szükség új változóra. Egy új munkalap beszúrásához a Sheets.Add parancsot használjuk. Azt, hogy az első munkalap elé szúrja be, a Before paraméter segítségével tudjuk biztosítani. Értékül az első munkalapot adjuk neki az alábbi módon: Worksheets(1). A munkalap ekkor még az alapértelmezett nevet viseli, ezért gyorsan nevezzük át a Name tulajdonság segítségével. A névváltoztatás célpontja ismét az első munkalap lesz, hiszen a beszúrásnak köszönhetően a tartalomjegyzék munkalapja lett az első.

Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

'Változók definiálása'
Dim sheetName As String

'Kérdezze meg a felhasználótól, mi legyen a tartalomjegyzék munkalapjának a neve!'
sheetName = InputBox("Mi legyen a tartalomjegyzék munkalapjának neve?", "Tartalomjegyzék munkalapjának neve")

'Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.'
ActiveWorkbook.Sheets.Add Before:=Worksheets(1)
'Adja az új munkalapnak a felhasználó által megadott nevet!'
Worksheets(1).Name = sheetName

'Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.'

'A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.'

'Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?'

'Ha igen, kérdezze meg, mi legyen a szöveg?'

'Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.'

'Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat,'
'hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.'

End Sub

Most, hogy már megvan a munkalap, amelyre a tartalomjegyzék kerül, elkészíthetjük a munkalapok neveinek listáját. Ehhez azonban tudnunk kell, hány munkalapunk is van, ezt a Count tulajdonság segítéségével fogjuk megtudni, az értéket pedig eltároljuk egy új változóban (sheetCount). (Ne feleljtsük el deklarálni az új változót a megfelelő helyen!)

Most, hogy már tudjuk, hányszor kell elvégeznünk a kiíratást, megfogalmazhatunk egy iterációt. Mivel ismerjük, hogy hányszor kell végrehajtani a műveleteket, a For ... Next típusú iteráció megfelelő lesz. Ehhez azonban be kell vezetnünk (és deklarálnunk még egy változót (tocRow), amelyben lényegében azt fogjuk tárolni, hogy a jelmagyarázat hányadik soránál járunk (ami megegyezik azzal, hogy hányadik munkalap adatait tartalmazza az adott sor). Sorról sorra haladva az első oszlopba beleírjuk, hányadik munkalapról van szó, a második oszlopba pedig beleírjuk a szóban forgó munkalap nevét. Előbbi a tocRow változó aktuális értéke, utóbbit pedig a tocRow változó és a Name tulajdonság segítségével szerezzük meg.

Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

'Változók definiálása'
Dim sheetName As String
Dim sheetCount, tocRow As Long

'Kérdezze meg a felhasználótól, mi legyen a tartalomjegyzék munkalapjának a neve!'
sheetName = InputBox("Mi legyen a tartalomjegyzék munkalapjának neve?", "Tartalomjegyzék munkalapjának neve")

'Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.'
ActiveWorkbook.Sheets.Add Before:=Worksheets(1)
'Adja az új munkalapnak a felhasználó által megadott nevet!'
Worksheets(1).Name = sheetName

'Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben...'
sheetCount = ActiveWorkbook.Sheets.Count

For tocRow = 1 To sheetCount
 
    '... és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.'
    Worksheets(1).Cells(tocRow, 1).Value = tocRow
    Worksheets(1).Cells(tocRow, 2).Value = Worksheets(tocRow).Name
 
    'A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.'

    'Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?'

    'Ha igen, kérdezze meg, mi legyen a szöveg?'

    'Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.'

    'Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat,'
    'hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.'
 
Next tocRow

End Sub

A következő tennivalónk, hogy a bejegyzéseket linkké tesszük, amelyekre kattintva a megfelelő munkalapra ugorhat a felhasználó. Ezt megtehetjük a már megírt iteráción belül, közvetlenül azután, hogy a tartalomjegyzék második oszlopba beleírtuk a munkalap nevét. A linket a Hyperlinks.Add parancs segítségével tudjuk elhelyezni, amely több paramétert is kér:

  • az Anchor jelenti a cellát vagy cellákat, amelyre kattintva átirányítja a felhasználót (esetünkben ez az adott sor második cellája),
  • az Address és a SubAddress pedig a célt, ahova az átirányítás után kerül a felhasználó (mivel munkafüzeten belül szeretnénk átirányítani, elegendő a SubAddress megadása),
  • a TextToDisplay pedig azt a szöveget jelenti, amely a felhasználó számára ad információt, hogy mit várjon, ha rákattint a linkre (mi ezt a célmunkalap nevével fogjuk kitölteni.
Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

'Változók definiálása'
Dim sheetName As String
Dim sheetCount, tocRow As Long

'Kérdezze meg a felhasználótól, mi legyen a tartalomjegyzék munkalapjának a neve!'
sheetName = InputBox("Mi legyen a tartalomjegyzék munkalapjának neve?", "Tartalomjegyzék munkalapjának neve")

'Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.'
ActiveWorkbook.Sheets.Add Before:=Worksheets(1)
'Adja az új munkalapnak a felhasználó által megadott nevet!'
Worksheets(1).Name = sheetName

'Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben...'
sheetCount = ActiveWorkbook.Sheets.Count

For tocRow = 1 To sheetCount
 
    '... és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.'
    Worksheets(1).Cells(tocRow, 1).Value = tocRow
    Worksheets(1).Cells(tocRow, 2).Value = Worksheets(tocRow).Name
 
    'A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.'
    With Worksheets(1)
        .Hyperlinks.Add Anchor:=.Cells(tocRow,2), _
        Address:="", _
        SubAddress:="'" & Worksheets(tocRow).Name & "'!A1", _
        TextToDisplay:=Worksheets(tocRow).Name
    End With

    'Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?'

    'Ha igen, kérdezze meg, mi legyen a szöveg?'

    'Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.'

    'Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat,'
    'hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.'
 
Next tocRow

End Sub

Ezen a ponton a makró már elkészít egy tartalomjegyzéket, amelynek elemeire kattintva a kiválasztott munkalapra ugorhatunk. (Érdemes kipróbálni!) Sajnos azonban az adott munkalapról még nem tudunk gyorsan visszajutni a tartalomjegyzékre, csak a hagyományos eszközökkel. Ezért ha a felhasználó szeretne ilyet, érdemes lehet elhelyezni egy "Vissza" gombot, aminek a szövegét is megadhatja a felhasználó. Következő lépésben ezeket az információkat kérjük be tőle. Javaslom azonban, hogy a kódban ezt helyezzük egy korábbi pontra: oda, ahol már kérünk be információt a felhasználótól. Így egyszerre megadja az összes szükséges információt és dolgozhat a makró. Ezért egy kicsit átstrukturáljuk és átfogalmazzuk a kommenteket, majd egy MsgBox segítségével megkérdezzük a felhasználótól, szeretne-e a munkalapok első sorába "Vissza" gombot elhelyezni? A MsgBox első paramétere az üzenetablakban megjelenő szöveg, a második egy számkód, amely azt adja meg, hogy milyen gombok jelenjenek meg az üzenet alatt (a 4 esetén egy Igen-Nem gombpáros jelenik meg), a harmadik pedig az üzenetablak fejlécének címe.

Az MsgBox működési logikája szerint ha a felhasználó megnyom egy gombot, attól függően, hogy melyik gombot nyomta meg, egy számot fog visszaadni. Ezt eltároljuk egy új változóban (backLink), majd megvizsgáljuk, hogy milyen számot tárol. Ha a benne tárolt szám 6, akkor a felhasználó az Igen gombot nyomta meg, tehát megkérdezhetjük tőle (InputBox és egy új, backLinkText változó segítségével), mi legyen a "Vissza" logikájú link felirata, egyébként ennek nincs relevanciája.

Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

'Változók definiálása'
Dim sheetName, backLinkText As String
Dim sheetCount, tocRow As Long
Dim backLink As Integer

'Kérdezze meg a felhasználótól, mi legyen a tartalomjegyzék munkalapjának a neve!'
sheetName = InputBox("Mi legyen a tartalomjegyzék munkalapjának neve?", "Tartalomjegyzék munkalapjának neve")

'Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?'
backLink = MsgBox("Legyen-e egy Vissza logikájú link a munkalapok első sorában?", 4, "Vissza logikájú link")
'Ha igen, kérdezze meg, mi legyen a szöveg?'
If backLink = 6 Then
    backLinkText = InputBox("Mi legyen a Vissza logikájú link felirata?", "Vissza logikájú link felirata")
End If

'Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.'
ActiveWorkbook.Sheets.Add Before:=Worksheets(1)
'Adja az új munkalapnak a felhasználó által megadott nevet!'
Worksheets(1).Name = sheetName

'Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben...'
sheetCount = ActiveWorkbook.Sheets.Count

For tocRow = 1 To sheetCount
 
    '... és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.'
    Worksheets(1).Cells(tocRow, 1).Value = tocRow
    Worksheets(1).Cells(tocRow, 2).Value = Worksheets(tocRow).Name
 
    'A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.'
    With Worksheets(1)
        .Hyperlinks.Add Anchor:=.Cells(tocRow,2), _
        Address:="", _
        SubAddress:="'" & Worksheets(tocRow).Name & "'!A1", _
        TextToDisplay:=Worksheets(tocRow).Name
    End With

    'Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.'

    'Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat,'
    'hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.'
 
Next tocRow

End Sub

Így most már nem csak a tartalomjegyzék van kész, hanem azt is tudjuk, a felhasználó szeretne-e "Vissza" logikájú linket a többi munkalapra. Ezt úgy építjük bele a kódba, hogy az iteráción belül egy If ... Then logika segítségével megvizsgáljuk a backLink értékét. Ha az egyenlő 6-al és nem a tartalomjegyzék munkalapjáról van szó, beszúrunk egy sort az adott munkalap elejére, az első cellába elhelyezzük a kért szöveget a tartalomjegyzék munkalapjára mutató linkkel. A sor beszúrásához az EntireRow és Insert parancsok kombinációját használjuk és örülünk annak a ténynek, hogy az Excel alapértelmezetten mindig a kiválasztott sor elé szúrja be az új sort. A cella szövegét ismét a Cells([sor],[oszlop]).Value segítségével adjuk meg, a link elhelyezéséhez pedig ismét a Hyperlinks.Add megoldást használjuk.

Sub CreateAndLinkTableOfContent()
'A makró egy tetszőleges nevű munkalapot szúr be a meglévőek elé.'
'Erre a munkalapra egy tartalomjegyzéket készít a többi munkalapot listázva, hivatkozást is elhelyezve az egyes munkalapokra.'

'Változók definiálása'
Dim sheetName, backLinkText As String
Dim sheetCount, tocRow As Long
Dim backLink As Integer

'Kérdezze meg a felhasználótól, mi legyen a tartalomjegyzék munkalapjának a neve!'
sheetName = InputBox("Mi legyen a tartalomjegyzék munkalapjának neve?", "Tartalomjegyzék munkalapjának neve")

'Kérdezze meg, szeretnénk-e vissza gombot elhelyezni a munkalapokon?'
backLink = MsgBox("Legyen-e egy Vissza logikájú link a munkalapok első sorában?", 4, "Vissza logikájú link")
'Ha igen, kérdezze meg, mi legyen a szöveg?'
If backLink = 6 Then
    backLinkText = InputBox("Mi legyen a Vissza logikájú link felirata?", "Vissza logikájú link felirata")
End If

'Szúrjon be egy új munkalapot a meglévők elé a legelső helyre.'
ActiveWorkbook.Sheets.Add Before:=Worksheets(1)
'Adja az új munkalapnak a felhasználó által megadott nevet!'
Worksheets(1).Name = sheetName

'Gyűjtse össze sorban, milyen munkalapok vannak a munkafüzetben...'
sheetCount = ActiveWorkbook.Sheets.Count

For tocRow = 1 To sheetCount
 
    '... és írja ezeket a Tartalomjegyzék munkalapra sorszámokkal ellátva.'
    Worksheets(1).Cells(tocRow, 1).Value = tocRow
    Worksheets(1).Cells(tocRow, 2).Value = Worksheets(tocRow).Name
 
    'A munkalapok neveit tegye linkké, hogy a tartalomjegyzékben rákattintva a névre a megfelelő munkalapra ugorjon.'
    With Worksheets(1)
        .Hyperlinks.Add Anchor:=.Cells(tocRow,2), _
        Address:="", _
        SubAddress:="'" & Worksheets(tocRow).Name & "'!A1", _
        TextToDisplay:=Worksheets(tocRow).Name
    End With

    'Haladjon végig a munkalapokon és minden munkalapra szúrjon be egy sort az összes többi sor elé.'
    If backLink = 6 And tocRow > 1 Then
        Worksheets(tocRow).Rows(1).EntireRow.Insert
  
        'Az új sorokba (az A1 cellába) írja bele a megadott szöveget, amit tegyen linkké, ami a tartalomjegyzékre mutat,'
        'hogy így vissza lehessen navigálni a tartalomjegyzék munkalapjára.'
        Worksheets(tocRow).Cells(1,1).Value = backLinkText
        With Worksheets(tocRow)
            .Hyperlinks.Add Anchor:=.Cells(1,1), _
            Address:="", _
            SubAddress:="'" & sheetName & "'!A1", _
            TextToDisplay:=backLinkText 
        End With
    End If
 
Next tocRow

End Sub

Nincs más hátra, mint kipróbálni a makrót, hogy valóban jó-e!

Ha eddig nem az Excel makrószerkesztőjébe írtad a kódot, most nyisd meg az Excelt, válaszd ki a Nézet szalagon a Makrók ikont. Add meg a makró nevét, kattints a Létrehozás gombra, majd másold be a kódot! Nyomd meg a Futtatás ikont vagy az F5 billentyűt és reménykedjünk, hogy jól dolgoztunk, nem gépeltünk el semmit!

A makró készen is van! Persze számos ponton lehetne még csiszolgatni, hiszen nem ellenőrzi, hogy a név, amit a tartalomjegyzék munkalapjának szeretne adni a felhasználó, szabad-e még, vagy van már olyan nevű munkalap, és egészen biztosan el fog akadni, ha valamelyik munkalapon minden sort kihasználtak, így nem tud egy újabb sort beszúrni az elejére... Azonban ezekkel az ismert hibákkal együtt is egy hasznos és jól használható makrót sikerült írnunk! Használjátok sok sikerrel és nyúljatok hozzá bátran a kódhoz, módosítgassátok, próbálkozzatok és higgyétek el, egyre jobban fogjátok érteni az Excel makrók működését! 

A makrót megtalálod a GitHub oldalunkon is!

Címkék: ,

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21