Mostanában sokat dolgoztam Excel tananyagfejlesztésen. Az elméleti, illetve a gyakorlati részeket Excel munkafüzetek munkalapjaira tettem. Arra gondoltam, hogy jól nézne ki az elején egy tartalomjegyzék, ahol linkekre kattintva lehet ugrani a kattintott munkalapra. Ehhez a munkalapok neveiből egy hiperlink listát kell készíteni, ami manuálisan, egyenként elég fájdalmas […]
Tovább... →Munkalapok Műveletei
Gyakran szükségünk lehet arra, hogy makrófutás közben megnézzük, hogy egy adott nevű munkalap létezik-e már vagy sem. Erre több megoldás is létezik, de a napokban találkoztam egy igen érdekes verzióval, ami mindenképpen megér annyit, hogy közzétegyem. Először nézzük a hagyományos megoldásokat A klasszikus és elegáns változat egy […]
Tovább... →A munkalapnevek listázására leginkább VBA, azaz makró megoldásokat lehet találni. De a minap egy érdekes megoldásra bukkantam itt, amit szeretnék veletek megosztani. Tulajdonképpen ez is makró, de nem VBA, hanem EXCEL4 makró. Az Excel4 makrók függvények képében még megtalálhatók a mai EXCEL verziókban is, kompatibilitási okokból. A […]
Tovább... →Meglehetősen sokszor találkozok azzal, hogy több munkalapos munkafüzetekben a munkalap nevét az egyik cellában konstansként is beírják. ha a lap neve megváltozik, akkor azt a cellát is manuálisan változtatni kell. Gondoltam, itt az ideje, hogy közzétegyem a megoldást, amit persze megint nem Én találtam ki, bár annyira […]
Tovább... →Munkalap ürességének ellenőrzése
Készítünk egy függvényt, ami paraméterként a vizsgálandó munkalapot kapja meg, vissza pedig egy logikai értéket ad.
Ha egy munkalap üres, akkor a használt tartomány címe az ‘A1’ lesz. És ha az üres, akkor a munkalapot üresnek tekinthetjük.
[vb]
Function is_empty_sheet(sname As Worksheet) As Boolean
is_empty_sheet = sname.UsedRange.Address = "$A$1" And IsEmpty(sname.Range("A1"))
End Function
[/vb]
Minden üres munkalap törlése
[vb]
Sub delete_blank_sheets()
Dim sh As Worksheet
For Each sh In Sheets
If is_empty_sheet(sh) Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
End If
Next
End Sub
[/vb]
Mindez videóra rögzítve működés közben
Üres-e a munkalap?
Az Excel egészen a 2013-as verzióig (de elképzelhető, hogy a további verziókra is igaz lesz) nem képes arra, hogy több munkalapot kijelölve egyszerre bekapcsolhassuk a lapvédelmet ugyanazzal a jelszóval.
Tehát több, sok munkalap esetén hosszas kattintgatás előtt állunk, ha ezt meg szeretnénk oldani, mivel egyesével kell bekapcsolni a lapvédelmet.
A jó hír az, hogy van megoldás a problémára, a rossz hír pedig az, hogy csak VBA kóddal oldható meg.
Igaz, a kódot nem kell a védendő dokumentumba tenni, elég, ha nyitva van egy olyan munkafüzet, amiben benne van az alábbi makró, és azt lefuttatjuk. Akár be is tehetjük a PERSONAL makró munkafüzetbe, és akkor bármikor rendelkezésünkre áll.
Nyissuk meg a PERSONAL makró füzetet. Ha nincs ilyen vagy nem tudjuk miről van szó,
akkor nézzük meg itt. A PERSONAL (Egyéni) makró füzet (link)
- Illesszünk be egy új modult, vagy ugorjunk egy létező modul végére
- Másoljuk be a lenti kódot
- Mentsük el
- Nyissuk meg a több védendő lapot tartalmazó dokumentumot
- ALT+F8 (Makró futtatás)
- Adjuk meg, hogy a PERSONAL makrófüzetben lévő makrókat mutassa
- Válasszuk ki a „Protect_Unprotect” makrót, és futtassuk
Lapvédelem ki/bekapcsolása több munkalapra makró
[vb]
Sub Protect_Unprotect( )
Dim wSheet As Worksheet
Dim pw as string
pw = inputbox("Add meg a jelszót:")
For Each wSheet In Worksheets
With wSheet
If .ProtectContents = True Then
.Unprotect Password:=pw
Else
.Protect Password:=pw
End If
End With
Next wSheet
End Sub
[/vb]
A makró bekéri a jelszót, majd végiglép minden munkalapon, és ha nincs bekapcsolva a védelem, akkor bekapcsolja, ha be volt kapcsolva, akkor pedig feloldja a védelmet.
A kódot bátran próbáljuk módosítani, hogy pl. csak bekapcsolja vagy csak kikapcsolja. Ezeket akár külön makróba is lehet tenni.
Vigyázat! A jelszót ne felejtsük el, mert ez a kód nem tárolja le sehová!
Tovább... →