Typename funkció:
Igazi kincs, az egyik leghasznosabb funkció VBA-ban. Egy objektum (object) adattípusát határozza meg, szöveges (string) formában.
Használatát az alábbiakban részletezem és animációban mutatom meg. A kapcsolódó makrónál: az adott munkafüzetbe szúrjunk be egy modult a Visual Basic szerkesztőjében és a releváns kódot adjuk hozzá.
1. Megmondja, hogy a felhasználó milyen típusú objektumot (pl. egy tartományt vagy grafikont stb.) választott ki a lapon.
Példa 01_01:
A kapcsolódó makró:
1 2 3 4 5 6 7 8 9 10 11 |
Sub Typename_Pelda01_01() Dim Kivalasztott As String 'Készítette: XLMotyo (https://xlmotyo.hu) 'a kiválasztott objektum adattípusát adja vissza szöveges formában Kivalasztott = TypeName(Selection) MsgBox Kivalasztott, vbInformation, "Kiválasztott objektum típusa:" End Sub |
Példa 01_02: az előző kód továbbfejlesztése, az eredmény magyarul jelenik meg:
A kapcsolódó makró:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub Typename_Pelda01_02() Dim Kivalasztott As String, KivalasztottMagyarul As String 'Készítette: XLMotyo (https://xlmotyo.hu) 'az elõzõ "Typename_Pelda01_01" nevû kód továbbfejlesztése, az eredmény magyarul jelenik meg Kivalasztott = TypeName(Selection) Select Case Kivalasztott 'az adattípus magyarul történõ kiírása - a lista igény szerint bõvíthetõ Case "Range" KivalasztottMagyarul = "Tartomány" Case "ChartArea" KivalasztottMagyarul = "Grafikon" Case "Nothing" KivalasztottMagyarul = "Nincs kiválasztva objektum" End Select If KivalasztottMagyarul = "" Then KivalasztottMagyarul = Kivalasztott MsgBox KivalasztottMagyarul, vbInformation, "Kiválasztott objektum típusa:" End Sub |
2. Ha egy adott objektumot (pl. tartományt) jelöltünk ki, illetve az a bizonyos objektum már eleve aktív, csak akkor fusson le a makró (olykor a makró bizonyos részeinél egy adott objektumnak aktívnak kell lennie, különben nem fut le a kód).
Példa 02_01: akkor fut le a kód (akkor jeleníti meg a kiválasztott tartomány címét), ha a kiválasztott objektum tartomány (range) típusú:
A kapcsolódó makró:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Typename_Pelda02_01() 'Készítette: XLMotyo (https://xlmotyo.hu) 'akkor írja ki a kijelölt tartomány hivatkozását, ha tartományt jelölünk ki (és nem pl. grafikont) If TypeName(Selection) = "Range" Then MsgBox Selection.Address, vbInformation, "Kijelölt tartomány:" Else MsgBox "Válassz ki egy munkalapon lévõ tartományt!", vbExclamation, "Nincs tartomány kiválasztva" End If End Sub |
Példa 02_02: Megvizsgálja az aktív lap típusát, ami lehet munkalap (worksheet) vagy diagram (chart):
A kapcsolódó makró:
1 2 3 4 5 6 7 8 9 |
Sub Typename_Pelda02_02() 'Készítette: XLMotyo (https://xlmotyo.hu) 'aktív lap típusának meghatározása: Munkalap (Worksheet) vagy Diagram lap (Chart sheet) '"ActiveSheet.Type" is alkalmazható, de az egy számot ad vissza a lap típusát illetõen, ami nem túl hasznos MsgBox TypeName(ActiveSheet), vbInformation, "Aktív lap típusa:" End Sub |
3. Ha a VBA kódban nem tudjuk egy változó típusát vagy nem vagyunk benne biztosak, ezzel könnyedén ellenőrizhetjük.
Példa 03: Itt a „ActiveSheet.UsedRange”-hez először meg kell bizonyosodnunk, hogy munkalapon (Worksheet) vagyunk-e, így a „Typename”-et kétszeresen is igénybe vesszük:
A kapcsolódó makró:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub Typename_Pelda03() 'Készítette: XLMotyo (https://xlmotyo.hu) 'változó típusának meghatározása Dim Y 'ha a változó után nem írunk semmit, akkor az "variant" típusú változó. Ugyanaz, mint: "Dim Y As Variant" If TypeName(ActiveSheet) = "Worksheet" Then Set Y = ActiveSheet.UsedRange Else Exit Sub 'ha aktív lap: munkalap (Worksheet) MsgBox "Az 'Y' nevû változót '" & TypeName(Y) & "' típusként kell deklarálni. Példa: " & vbNewLine & _ "Dim Y As " & TypeName(Y), vbInformation, "Változó deklarálása" End Sub |
Angol nyelvű leírás a funkcióról, további példákkal itt.
Az alábbi posztokban használtam már a „Typename”-et:
- Tartomány szűrése gépeléssel
- Görgetési pozíció: kezdő (vagyis bal felső) cella beállítása
- Üres munkalapok törlése
Inspiráció a bejegyzéshez: https://www.thespreadsheetguru.com/the-code-vault/2014/3/12/how-to-determine-your-variable-type
Remélem hasznos volt a poszt.
Kérdésed, észrevételed van? Szólj hozzá lent vagy dobj egy emailt: xlmotyo@gmail.com