Hivatkozott Excel verzio: Excel 2007 Excel 2010 Excel 2013 Excel 2016
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 ciklussal elindul a munkafüzet összes munkalapján, és ha talál olyan nevűt, amit keresünk, akkor TRUE, különben FALSE értékkel tér vissza.
Function Lap_letezik(lapnev As String) As Boolean Dim ws as worksheet
Lap_letezik = False
For Each ws In Worksheets
If ws.name = lapnev Then
Lap_letezik
= True Exit Function End If Next ws End Function
Vannak olyan megoldások, amik megpróbálnak egy műveletet végezni a megadott nevű lappal, vagy lekérdezik egy tulajdonságát. Ha nem létezik, akkor a művelet hibát fog eredményezni. A keletkező hibát pedig tudjuk érzékelni, és ez alapján eldönteni, hogy létezik a munkalap vagy nem.
Ebből az egyik, ami megvizsgálja, hogy az adott nevű munkalap objektum létezik-e.
Function lap_letezik(ByVal lapnev As String) As Boolean
On Error Resume Next
lap_letezik = Not Worksheets(lapnev) Is Nothing
On Error Goto 0
End Function
A másik lekéri az adott nevű munkalap sorszámát. Ha a hibakód nulla, akkor sikerült a művelet, azaz létezik a lap, különben pedig nem.
Function lap_letezik(lapnev As String) As Boolean Dim nev As String On Error Resume Next nev = Sheets(lapnev).Index If Err.Number = 0 Then lap_letezik = True Else lap_letezik = False On Error GoTo 0 End Function
Végül lássuk a beígért érdekes módszert
Tulajdonképpen ez is a „próbáljunk vele egy műveletet” kategóriába tartozik. Összeállítunk egy hivatkozást az A1-es cellára megadott nevű munkalapra, és az ISREF munkalapfüggvénnyel megvizsgáljuk, hogy sikerült-e.
Function lap_letezik(lapnev As String) As Boolean lap_letezik = Evaluate("ISREF('" & lapnev & "'!A1)") End Function
Itt felhívnám a figyelmet az Evaluate függvényre.
Szövegesen összeállított képleteket tud kiértékelni, és visszaadja az eredményt. Tehát az INDIRECT függvényhez hasonlóan, string-ben, akár dinamikusan állíthatjuk össze a képletet. Míg az INDIREKT függvény argumentumában szövegesen rakhatunk össze egy hivatkozást, az EVALUATE bármilyen, szövegesen megkonstruált Excel képletet kiszámol.
Vélemény, hozzászólás?
Hozzászólás küldéséhez be kell jelentkezni.