Denna artikel kommer att visa användningen av VBA TypeName -funktionen.
VBA Typnamn Funktion används för att bestämma typen av data som lagras i en cell, eller typen av ett valt objekt - till exempel ett kalkylblad, intervall eller cell eller en kontroll på ett formulär.
Bestäm datatypen i en cell
För att bestämma vilken datatyp i en cell vi kan använda funktionen Typnamn med egenskapen Cells.
123 | Sub TestCellDataType ()MsgBox "Typ av data i" & Cells (3, 2). Adress & "är" & TypeName (Cells (3, 2) .Value)Avsluta Sub |
Om vi kör den här koden ovan med kalkylbladet nedan kommer meddelanderutan att berätta vilken typ av data som finns i cellen.
Bestämning av vilken typ av objekt som valts
Vi kan också använda TypeName för att avgöra vilken typ av objekt som har valts i ett kalkylblad - till exempel ett intervall eller ett diagram.
123 | Sub TestSelection ()MsgBox "Du har valt ett" och typnamn (urval)Avsluta Sub |
Eller, om vi väljer ett diagram:
Vi kan borra ner ännu mer och välja objekt i diagrammet, och makrot returnerar det vi har valt.
Allt detta kan vara mest användbart för att bygga vårt VBA -projekt för att antingen styra flödet av koden eller för att förhindra att fel uppstår genom att testa för att säkerställa att rätt typ av objekt väljs eller att rätt typ av data matas in i en cell .
Använda TypeName på formulärkontroller
VBA gör det möjligt för oss att skapa interaktiva formulär som användaren kan fylla i och returnera data till koden för att användas på olika sätt. Vi kan använda operatören TypeName för att bestämma vilken typ av kontroller som används på ett formulär.
I exemplet nedan har jag skapat ett användarformulär med en mängd olika kontroller på det - ett par textrutor, en kombinationsruta, 2 alternativknappar, 2 kryssrutor och 3 kommandoknappar.
Med hjälp av koden nedan kan jag avgöra vilken typ av kontroller som finns på formuläret genom att gå igenom alla kontroller på formuläret. Jag har använt TypeName -funktionen för att returnera ett meddelande med typen av kontroll med ett VBA IF -uttalande för att kontrollera vilken typ av kontroll som är vald.
123456 | Sub WhatControlType ()Dim ctl som objektFör varje ctl In Me.ControlsMsgBox "Kontrollen är ett" & TypeName (ctl)Nästa ctlAvsluta Sub |
Denna typ av kod kan vara mycket användbar om vi vill aktivera eller inaktivera kontroller. I koden nedan, när formuläret öppnas först, är alternativknapparna och kryssrutorna inaktiverade.
123456789101112 | Private Sub UserForm_Initialize ()Dim ctl som objektFör varje ctl In Me.ControlsOm TypeName (ctl) = "CheckBox" Dåctl.Enabled = FalsktElseIf TypeName (ctl) = "OptionButton" Sedanctl.Enabled = FalsktAnnanctl.Enabled = TrueAvsluta omNästa ctlAvsluta Sub |
För att aktivera alternativknapparna och kryssrutorna har jag skrivit ytterligare en kod bakom knappen Aktivera kontroller.
12345678910 | Privat under cmdEnable_Click ()Dim ctl som objektFör varje ctl In Me.ControlsOm TypeName (ctl) = "CheckBox" Dåctl.Enabled = Inte ctl.EnabledElseIf TypeName (ctl) = "OptionButton" Sedanctl.Enabled = Inte ctl.EnabledAvsluta omNästa ctlAvsluta Sub |
Funktionen i denna kod kan också skapas med VBA TypeOf Operator.