Innehållsförteckning
Ett av de vanligaste felen som vi möter när vi arbetar med VBA i Excel är att den användardefinierade typen inte är definierad. I den här artikeln visar jag varför det här felet uppstår och hur du löser det.
Ladda ner övningsboken
Ladda ner den här arbetsboken för att träna medan du läser den här artikeln.
Användardefinierad typ ej definierad.xlsm2 Orsaker till och lösningar på Användardefinierad typ som inte är definierad i Excel VBA
Det finns 2 De viktigaste frågorna bakom detta vanliga fel i Excel. VBA Låt oss undersöka dem i detalj och ta reda på hur de kan lösas.
1. Stavfel vid deklaration av variabler
Detta är den främsta orsaken till felet. Oftast är felet "Användardefinierad typ ej definierad" beror på ett stavfel vid deklaration av variabler.
Titta på följande rader av koder.
Sub User_Defined_Type_not_Defined() Dim Name As Strng Name = "ExcelWIKI" MsgBox Name End Sub
Om du kör den här koden får du en felruta som meddelar dig att felet finns "Användardefinierad typ ej definierad". Tillsammans med den hittar du den andra raden i koden markerad i blått, där jag skrev "strng" i stället för "sträng" .
Jag hoppas att du förstår vad jag menar. VBA kunde inte känna igen variabeltypen "strng" Därför betraktade den den som en ny variabeltyp och trodde att du hade definierat den någonstans, men när den upptäckte att du inte hade deklarerat den någonstans, uppstod ett fel.
När man kör enkla VBA koder, om du ändå stöter på detta fel, kontrollera först alla stavningar av dina variabeltyper.
2. Brist på korrekta referenser
Det finns en annan orsak till felet, nämligen brist på korrekt hänvisning. Ibland använder vi vissa objekt i våra koder som behöver korrekt hänvisning från Visual Basic-referensrutan . Annars, VBA inte känner igen objektet.
Titta på följande VBA kod.
Sub User_Defined_Type_not_Defined() Dim MyDictionary As Dictionary Set MyDictionary = CreateObject("Scripting.Dictionary") End Sub
Kör den här koden och du får samma gamla fel. "Användardefinierad typ ej definierad", att belysa den Ordboksobjekt Detta beror på att VBA kunde inte känna igen den Ordboksobjekt och betraktade den som en användardefinierad variabel som inte har definierats felaktigt.
Den största frågan är nu hur man löser detta fel? Enkelt. 2 sätt att lösa detta fel.
⧪ Lösning 1: Kontrollera förutsättningsreferensen från referensrutan i Visual Box
Det här är det smartaste sättet att lösa problemet: Gå till Verktyg> Referenser knappen i Visual Basic band. Klicka på Referenser .
En dialogruta med namnet Referenser öppnas. Bläddra och hitta Microsoft Scripting Runtime (Detta beror på vilket objekt du använder. Ordboksobjekt behöver Microsoft Scripting Runtime att känna igen. Så när du använder ett objekt i en VBA kod, måste du känna till dess förutsättningar för att bli erkänd av VBA. Besök den här länken för mer information.).
Kom nu tillbaka och kör koden och du får inga fel. VBA kan känna igen den Ordboksobjekt den här gången.
⧪ Lösning 2: Ange det som ett rent objekt i stället för ett specifikt objekt
Det finns ett annat sätt att lösa problemet: Du kan deklarera objektet som ett rent objekt, istället för som en Ordboksobjekt .
Lägg märke till följande rader av koder.
Sub User_Defined_Type_not_Defined() Dim MyDictionary As Object Set MyDictionary = CreateObject("Scripting.Dictionary") End Sub
Här har jag deklarerat variabeln Min ordbok som ett enkelt objekt, inte ett Ordbok. Om du kör den här koden får du inget fel.