- Különbség a VBA munkalapjai és lapjai között
- Munkalap hivatkozása a VBA -ban
- Munkalap hozzáadása
- Munkalap törlése
- A munkalapok átnevezése
- Munkalap -objektum hozzárendelése egy változóhoz
- Munkalapok elrejtése VBA használatával (rejtett + nagyon rejtett)
- Táblázatok elrejtése a benne található szöveg alapján
- A munkalapok rendezése ábécé sorrendben
- Védje/távolítsa el az összes lapot egyszerre
- Az összes munkalap tartalomjegyzékének létrehozása (hiperhivatkozásokkal)
- Hová tegye a VBA kódot
A cellákon és tartományokon kívül a munkalapokkal való munka egy másik terület, amelyet tudnia kell a VBA hatékony használatáról az Excelben.
A VBA bármely objektumához hasonlóan a munkalapokhoz különböző tulajdonságok és módszerek kapcsolódnak, amelyeket használhat, miközben automatizálja a munkát az Excel VBA -val.
Ebben az oktatóanyagban részletesen bemutatom a „Munkalapokat”, és néhány gyakorlati példát is bemutatok.
Kezdjük hát el.
Az ebben az oktatóanyagban említett összes kódot el kell helyezni a VB szerkesztőbe. Lépjen a „Hová tegye a VBA -kódot” szakaszhoz, hogy megtudja, hogyan működik.Ha érdekli a VBA egyszerű tanulása, nézze meg az enyémet Online Excel VBA képzés.
Különbség a VBA munkalapjai és lapjai között
A VBA -ban két gyűjteménye van, amelyek néha kissé zavaróak lehetnek.
A munkafüzetben lehet munkalap és diagramlap. Az alábbi példa három munkalapot és egy diagramlapot tartalmaz.
Excel VBA -ban:
- A „Munkalapok” gyűjtemény a munkafüzet összes munkalap -objektumának gyűjtésére vonatkozna. A fenti példában a Munkalapok gyűjtemény három munkalapból állna.
- A „Lapok” gyűjtemény a munkafüzet összes munkalapjára és diagramlapjára vonatkozna. A fenti példában négy eleme lenne - 3 feladatlap + 1 diagramlap.
Ha olyan munkafüzete van, amely csak munkalapokat és diagramlapokat nem tartalmaz, akkor a „Munkalapok” és a „Táblázatok” gyűjtemény ugyanaz.
De ha egy vagy több diagramlapja van, a „Táblázatok” gyűjtemény nagyobb lesz, mint a „Munkalapok” gyűjtemény
Táblázatok = Munkalapok + Táblázatlapok
Most ezzel a megkülönböztetéssel azt javaslom, hogy a VBA kód írása során a lehető legkonkrétabb legyen.
Tehát ha csak a munkalapokra kell hivatkoznia, használja a „Munkalapok” gyűjteményt, és ha minden lapra (beleértve a táblázatlapokat is), a „Táblázatok” gyűjteményt kell használnia.
Ebben az oktatóanyagban csak a „Munkalapok” gyűjteményt fogom használni.
Munkalap hivatkozása a VBA -ban
Sokféle módon hivatkozhat a VBA munkalapjára.
A munkalapokra való hivatkozás megértése segíthet a jobb kód írásban, különösen akkor, ha hurkokat használ a VBA -kódban.
A munkalap nevének használata
A munkalapra való hivatkozás legegyszerűbb módja annak neve.
Tegyük fel például, hogy van egy munkafüzete három munkalappal - 1. lap, 2. lap, 3. lap.
És aktiválni szeretné a 2. lapot.
Ezt a következő kód használatával teheti meg: Sub ActivateSheet () Munkalapok ("Sheet2").
A fenti kód arra kéri a VBA -t, hogy hivatkozzon a Munkalapok gyűjtemény 2. lapjára, és aktiválja azt.
Mivel a lap pontos nevét használjuk, itt használhatja a Táblázatok gyűjteményt is. Tehát az alábbi kód is ezt tenné.
Sub ActivateSheet () Sheets ("Sheet2"). Aktiválja a End Sub
Az indexszám használata
Míg a munkalap használata egyszerű módja a munkalapra való hivatkozásnak, néha előfordulhat, hogy nem tudja a munkalap pontos nevét.
Ha például VBA -kóddal új munkalapot ad hozzá a munkafüzethez, és nem tudja, hány munkalap van már ott, akkor nem tudja az új munkalap nevét.
Ebben az esetben használhatja a munkalapok indexszámát.
Tegyük fel, hogy a következő munkalapok vannak a munkafüzetben:
Az alábbi kód aktiválja a Sheet2 -t:
Sub ActivateSheet () Munkalapok (2). Aktiválja a End Sub -t
Ne feledje, hogy a 2 -es indexszámot használtuk Feladatlapok (2). Ez a munkalapok gyűjteményének második tárgyára vonatkozna.
Mi történik, ha a 3 -at használja indexszámként?
A Sheet3 lesz kiválasztva.
Ha kíváncsi, miért választotta a Sheet3 -at, mivel egyértelműen a negyedik objektum.
Ez azért történik, mert egy diagramlap nem része a munkalapgyűjteménynek.
Tehát amikor a Munkalapok gyűjteményben szereplő indexszámokat használjuk, az csak a munkafüzet munkalapjaira fog utalni (és figyelmen kívül hagyja a diagramlapokat).
Éppen ellenkezőleg, ha a Táblázatokat használja, a Táblázatok (1) a Táblázatok1, a Táblázatok (2) a Második, A Táblázatok (3) az Ábra1, a Táblázatok (4) pedig a 3 -as lapra vonatkozna.
Az indexszám használatának ez a technikája akkor hasznos, ha a munkafüzet összes munkalapját át akarja tekinteni. Megszámolhatja a munkalapok számát, majd ezt a számot használhatja (ezt a bemutatót később megtudjuk).
Megjegyzés: Az indexszám balról jobbra halad. Tehát ha a Sheet2 -t a Sheet1 bal oldalára tolja, akkor az (1) munkalap a Sheet2 -re hivatkozik.
A munkalap kódjának használata
A lapnév használatának egyik hátránya (amint azt a fenti részben láttuk) az, hogy a felhasználó megváltoztathatja azt.
És ha a lap nevét megváltoztatták, a kód nem működik, amíg meg nem változtatja a munkalap nevét a VBA -kódban is.
A probléma megoldásához használhatja a munkalap kódnevét (az eddig használt szokásos név helyett). A kódnév hozzárendelhető a VB szerkesztőben, és nem változik, ha megváltoztatja a munkalap területéről a munkalap nevét.
A munkalap kódnevének megadásához kövesse az alábbi lépéseket:
- Kattintson a Fejlesztő fülre.
- Kattintson a Visual Basic gombra. Ez megnyitja a VB szerkesztőt.
- Kattintson a Nézet lehetőségre a menüben, majd kattintson a Projektablak elemre. Ezzel láthatóvá válik a Tulajdonságok panel. Ha a Tulajdonságok panel már látható, hagyja ki ezt a lépést.
- Kattintson az átnevezni kívánt projektfelfedező lap nevére.
- A Tulajdonságok panelen módosítsa a nevet a (Név) előtti mezőben. Ne feledje, hogy a névben nem lehet szóköz.
A fenti lépések megváltoztatnák a munkalap nevét a VBA háttérben. Az Excel munkalap nézetben a munkalapot bármikor elnevezheti, de a háttérben mind a nevekre - a lap nevére és a kódnévre - válaszolni fog.
A fenti képen a lap neve „SheetName”, a kódnév pedig „CodeName”. Még ha megváltoztatja a munkalapon a munkalap nevét, a kódnév változatlan marad.
Most a Munkalapok gyűjteményével hivatkozhat a munkalapra, vagy használhatja a kódnevet.
Például mindkét sor aktiválja a munkalapot.
Munkalapok ("Lapnév"). Aktiválja a CodeName.Activate lehetőséget
A kettő közötti különbség az, hogy ha megváltoztatja a munkalap nevét, az első nem működik. De a második sor a megváltozott név mellett is tovább működne. A második sor (a kódnév használatával) szintén rövidebb és könnyebben használható.
Hivatkozás egy munkalapra egy másik munkafüzetben
Ha egy másik munkafüzet munkalapjára szeretne hivatkozni, a munkafüzetnek nyitva kell lennie, amíg a kód fut, és meg kell adnia a munkafüzet nevét és a hivatkozni kívánt munkalapot.
Például, ha van egy Példaképek nevű munkafüzete, és aktiválni szeretné a 1. lapot a Példa munkafüzetben, akkor az alábbi kódot kell használnia:
Sub SheetActivate () Munkafüzetek ("Examples.xlsx"). Munkalapok ("Sheet1"). Act End End
Ne feledje, hogy ha a munkafüzetet elmentette, akkor a fájl nevét a kiterjesztéssel együtt kell használnia. Ha nem tudja, milyen nevet használjon, kérjen segítséget a Project Explorer -től.
Ha a munkafüzetet nem mentette el, akkor nem kell a fájlkiterjesztést használni.
Munkalap hozzáadása
Az alábbi kód hozzáadna egy munkalapot (első munkalapként - azaz a lap bal szélső lapjaként).
Sub AddSheet () feladatlapok. Add End Sub
A Sheet2 alapértelmezett nevet veszi fel (vagy bármely más számot, attól függően, hogy hány lap van már ott).
Ha azt szeretné, hogy egy munkalapot egy adott munkalap (például a Sheet2) előtt adjunk hozzá, akkor használhatja az alábbi kódot.
Sub AddSheet () Worksheets.Add Before: = Munkalapok ("Sheet2") End Sub
A fenti kód arra utasítja a VBA -t, hogy adjon hozzá egy lapot, majd az „Előtte” utasítás segítségével határozza meg azt a munkalapot, amely elé az új munkalapot be kell illeszteni.
Hasonlóképpen, egy lapot is hozzáadhat a munkalap (mondjuk a Sheet2) után az alábbi kód használatával:
Sub AddSheet () Worksheets.Add After: = Munkalapok ("Sheet2") End Sub
Ha azt szeretné, hogy az új lap a lapok végére kerüljön, először tudnia kell, hány lap van. A következő kód először megszámolja a lapok számát, és hozzáadja az új lapot az utolsó lap után (amelyre az indexszám segítségével hivatkozunk).
Sub AddSheet () Dim SheetCount As Integer SheetCount = Munkalapok. Munkalapok számlálása. Add After: = Munkalapok (SheetCount) End Sub
Munkalap törlése
Az alábbi kód törli az aktív lapot a munkafüzetből.
Sub DeleteSheet () ActiveSheet. Delete End Sub
A fenti kód figyelmeztető üzenetet jelenít meg a munkalap törlése előtt.
Ha nem szeretné látni a figyelmeztető üzenetet, használja az alábbi kódot:
Sub DeleteSheet () Application.DisplayAlerts = Hamis ActiveSheet.Delete Application.DisplayAlerts = Igaz vég al
Ha az Application.DisplayAlerts értéke False, akkor nem jelenik meg a figyelmeztető üzenet. Ha használja, ne felejtse el visszaállítani True értékre a kód végén.
Ne feledje, hogy ezt a törlést nem vonhatja vissza, ezért használja a fenti kódot, ha teljesen biztos benne.
Ha törölni szeretne egy adott lapot, akkor ezt a következő kóddal teheti meg:
Sub DeleteSheet () Munkalapok ("Sheet2"). Törlés End Sub
A lap kódnevével is törölheti.
Sub DeleteSheet () Sheet 5. Delete End Sub
A munkalapok átnevezése
A Munkalap névtulajdonságával módosíthatja a nevét.
A következő kód megváltoztatja az 1. lap nevét „Összefoglaló” -ra.
Al RenameSheet () Munkalapok ("Sheet1"). Name = "Summary" End Sub
Ezt kombinálhatja a lap hozzáadása módszerrel, hogy meghatározott nevű lapkészletet kapjon.
Például, ha négy lapot szeretne beszúrni a 2021-2022 Q1, 2021-2022 Q2, 2021-2022 Q3 és 2021-2022 Q4 névvel, akkor használja az alábbi kódot.
Sub RenameSheet () Dim Countsheets as Integer Countsheets = Worksheets.Count For i = 1 to 4 Worksheets.Add after: = Worksheets (Countsheets + i - 1) Worksheets (Countsheets + i) .Name = "2018 Q" & i Next i End Sub
A fenti kódban először megszámoljuk a lapok számát, majd egy For Next ciklus segítségével új lapokat illesztünk a végére. A munkalap hozzáadásával a kód azt is átnevezi.
Munkalap -objektum hozzárendelése egy változóhoz
Amikor munkalapokkal dolgozik, hozzárendelhet egy munkalapot egy objektumváltozóhoz, majd a változót használja a munkalap hivatkozásai helyett.
Például, ha egy év előtagot szeretne hozzáadni az összes munkalaphoz, ahelyett, hogy számolná a lapokat és a ciklusokat annyiszor futtatná, használhatja az objektumváltozót.
Itt található a kód, amely hozzáadja a 2021-2022 előtagot a munkalap összes nevéhez.
Al RenameSheet () Dim Ws munkalapként minden munkalaphoz Ws.Name = "2018 -" & Ws.Name Next Ws End Sub
A fenti kód a Ws változót deklarálja munkalap típusaként (a „Dim Ws as Workheet” sor segítségével).
Most nem kell számolnunk a lapok számát, hogy ezeket végigcsináljuk. Ehelyett használhatjuk a „Minden munkalapon lévő W -hez” hurkot. Ez lehetővé teszi számunkra, hogy végigolvassa a munkalapgyűjtemény összes lapját. Nem mindegy, hogy 2 vagy 20 lap van.
Bár a fenti kód lehetővé teszi számunkra, hogy végiglapozzuk az összes lapot, egy adott lapot is hozzárendelhet egy változóhoz.
Az alábbi kódban hozzárendeljük a Ws változót a Sheet2 -hez, és ezzel elérjük a Sheet2 összes tulajdonságát.
Al RenameSheet () Dim Ws munkalapkészletként Ws = Munkalapok ("Sheet2") Ws.Name = "Summary" Ws.Protect End Sub
Miután beállított egy munkalap hivatkozást egy objektumváltozóra (a SET utasítás használatával), az adott objektum használható a munkalap hivatkozása helyett. Ez akkor lehet hasznos, ha hosszú, bonyolult kódja van, és módosítani szeretné a hivatkozást. Ahelyett, hogy mindenhol elvégezné a változtatást, egyszerűen elvégezheti a módosítást a SET utasításban.
Ne feledje, hogy a kód a Ws objektumot a Munkalap típusú változóként deklarálja (a Dim Ws sort használva munkalapként).
Munkalapok elrejtése VBA használatával (rejtett + nagyon rejtett)
A munkalapok elrejtése és elrejtése Excelben egyszerű feladat.
Elrejthet egy munkalapot, és a felhasználó nem látja azt, amikor megnyitja a munkafüzetet. Azonban könnyen megjeleníthetik a munkalapot, ha jobb gombbal kattintanak bármelyik lap fülére.
De mi van akkor, ha nem akarja, hogy fel tudják tárni a munkalap (ok) t.
Ezt megteheti a VBA segítségével.
Az alábbi kód elrejti a munkafüzet összes munkalapját (kivéve az aktív lapot), így nem tudja feloldani a lap elrejtését a jobb egérgombbal a lap nevére kattintva.
Sub HideAllExcetActiveSheet () Dim Ws munkalapként minden munkalaphoz ebben a munkafüzetben.
A fenti kódban a Ws.Visible tulajdonság erre változik xlSheetVeryHidden.
- Ha a Látható tulajdonság xlSheetVisible értékre van állítva, a munkalap látható a munkalap területen (munkalap lapjai).
- Ha a Látható tulajdonság xlSheetHidden értékre van állítva, a lap el van rejtve, de a felhasználó feloldhatja azt, ha jobb gombbal kattint bármelyik lap lapjára.
- Ha a Látható tulajdonság xlSheetVeryHidden értékre van állítva, a lap el van rejtve, és nem lehet feloldani a munkalap területéről. VBA -kódot vagy a tulajdonságok ablakot kell használnia annak megjelenítéséhez.
Ha egyszerűen el szeretné rejteni a lapokat, amelyek könnyen elrejthetők, használja az alábbi kódot:
Sub HideAllExceptActiveSheet () Dim Ws munkalapként minden munkalaphoz ebben a munkafüzetben. Munkalapok Ha Ws.Name ActiveSheet.Name then Ws.Visible = xlSheetHidden Next Ws End Sub
Az alábbi kód megjelenítené az összes munkalapot (mind rejtett, mind nagyon rejtett).
Sub UnhideAllWoksheets () Dim Ws munkalapként minden munkalaphoz ebben a munkafüzetben. Worksheets Ws.Visible = xlSheetVisible Next Ws End Sub
Kapcsolódó cikk: Az összes munkalap megjelenítése Excelben (egyszerre)
Táblázatok elrejtése a benne található szöveg alapján
Tegyük fel, hogy több lapja van a különböző osztályok vagy évek nevével, és el szeretné rejteni az összes lapot, kivéve azokat, amelyekben szerepel a 2021–2022.
Ezt a VBA INSTR függvénnyel teheti meg.
Az alábbi kód elrejti az összes lapot, kivéve azokat, amelyeken a 2021-2022 szöveg szerepel.
Sub HideWithMatchingText () Dim Ws munkalapként a munkalapok minden egyes W -jéhez Ha InStr (1, Ws.Name, "2018", vbBinaryCompare) = 0 Akkor Ws.Visible = xlSheetHidden End If Next Ws End Sub
A fenti kódban az INSTR függvény visszaadja a karakter pozícióját, ahol megtalálja a megfelelő karakterláncot. Ha nem találja a megfelelő karakterláncot, 0 -t ad vissza.
A fenti kód ellenőrzi, hogy a név tartalmazza-e a 2021-2022 szöveget. Ha igen, akkor nem történik semmi, különben a munkalap rejtve van.
Ezzel egy lépéssel tovább léphet, ha a szöveget egy cellában tartja, és ezt a cellát használja a kódban. Ez lehetővé teszi, hogy legyen érték a cellában, majd a makró futtatásakor az összes munkalap, kivéve azt, amelyiken a megfelelő szöveg szerepel, látható marad (a lapokkal együtt, ahol az értéket a sejt).
A munkalapok rendezése ábécé sorrendben
A VBA használatával gyorsan rendezheti a munkalapokat a nevük alapján.
Például, ha olyan munkafüzete van, amely különböző osztályokra vagy évekre vonatkozó lapokat tartalmaz, akkor az alábbi kód segítségével gyorsan rendezheti ezeket a lapokat növekvő sorrendben.
Sub SortSheetsTabName () Application.ScreenUpdating = False Dim ShCount as Integer, i As Integer, j As Integer ShCount = Sheets.Count For i = 1 To ShCount - 1 For j = i + 1 to ShCount If Sheets (j) .Name < Táblázatok (i). Név, majd Táblázatok (j). Mozgás előtt: = Táblázatok (i) Vége, ha Következő j Következő i Alkalmazás. ScreenUpdating = Igaz végrész
Ne feledje, hogy ez a kód jól működik a szöveges nevekkel, és a legtöbb esetben az évekkel és számokkal is. De rossz eredményeket adhat, ha a lapok neve 1,2,11. Ez rendezi és megadja az 1, 11, 2 sorozatot. Ez azért van, mert az összehasonlítást szövegként végzi, és 2 -t nagyobbnak tart 11 -nél.
Védje/távolítsa el az összes lapot egyszerre
Ha sok munkalap van egy munkafüzetben, és meg szeretné védeni az összes lapot, akkor használja az alábbi VBA -kódot.
Lehetővé teszi a jelszó megadását a kódon belül. Erre a jelszóra lesz szüksége a munkalap védelmének feloldásához.
Sub ProtectAllSheets () Dim ws munkalapként Halvány jelszó mint karakterlánc jelszó = "Test123" 'cserélje ki a Test123 -at a kívánt jelszóval Minden ws -hez a munkalapokon ws.Védje a jelszót: = jelszó Következő ws End Sub
A következő kód egy menetben feloldja az összes lap védelmét.
Sub ProtectAllSheets () Dim ws munkalapként Halvány jelszó mint karakterlánc jelszó = "Test123" 'cserélje ki a Test123 jelszót, amelyet a védelem során használt
Az összes munkalap tartalomjegyzékének létrehozása (hiperhivatkozásokkal)
Ha a munkafüzetben van egy munkalapkészlet, és gyorsan be szeretne illeszteni egy összefoglaló lapot, amely az összes lapra mutató hivatkozásokat tartalmaz, akkor használja az alábbi kódot.
Sub AddIndexSheet () Worksheets.Add ActiveSheet.Name = "Index" For i = 2 To Worksheets.Count ActiveSheet.Hyperlinks.Add Anchor: = Cells (i - 1, 1), _ Address: = "", SubAddress: = Munkalapok (i) .Name & "! A1", _ TextToDisplay: = Munkalapok (i) .Name Next i End Sub
A fenti kód új munkalapot szúr be, és indexnek nevezi.
Ezután végiglapozza az összes munkalapot, és hiperhivatkozást hoz létre az indexlap összes munkalapjához.
Hová tegye a VBA kódot
Kíváncsi vagy, hova kerül a VBA -kód az Excel -munkafüzetben?
Az Excel rendelkezik VBA háttérprogrammal, amelyet VBA -szerkesztőnek hívnak. Be kell másolnia és beillesztenie a kódot a VB Editor modul ablakába.
Ehhez tegye a következő lépéseket:
- Lépjen a Fejlesztő fülre.
- Kattintson a Visual Basic lehetőségre. Ez megnyitja a VB szerkesztőt a háttérben.
- A VB szerkesztő Project Explorer ablaktáblájában kattintson jobb gombbal a munkafüzet bármely olyan objektumára, amelybe be szeretné illeszteni a kódot. Ha nem látja a Project Explorer programot, lépjen a Nézet fülre, és kattintson a Project Explorer elemre.
- Lépjen a Beszúrás elemre, és kattintson a Modul elemre. Ezzel beszúr egy modulobjektumot a munkafüzetébe.
- Másolja ki és illessze be a kódot a modul ablakába.
A következő Excel VBA oktatóanyagok is tetszhetnek:
- Munkafüzetek használata VBA használatával.
- Az IF majd más állítások használata a VBA -ban.
- Következő hurok a VBA -ban.
- Felhasználó által definiált függvény létrehozása Excelben.
- Makró rögzítése Excelben.
- Makró futtatása Excelben.
- Excel VBA események - Egyszerű (és teljes) útmutató.
- Bővítmény létrehozása Excelben.
- A makró mentése és újrafelhasználása az Excel Personal Macro Workbook segítségével.