Съдържание
Една от най-често срещаните грешки, с които се сблъскваме при работа с VBA в Excel е, че дефинираният от потребителя тип не е дефиниран. В тази статия ще ви покажа защо се получава тази грешка и как да я решите.
Изтегляне на работна тетрадка за практика
Изтеглете тази учебна тетрадка, за да се упражнявате, докато четете тази статия.
Тип, дефиниран от потребителя, не е дефиниран.xlsm2 Причини и решения за Тип, дефиниран от потребителя, не е дефиниран в Excel VBA
Има 2 основните проблеми, които стоят зад тази често срещана грешка в Excel VBA . Нека да ги разгледаме подробно и да открием начините за решаването им.
1. Правописна грешка при деклариране на променливи
Това е основната причина за тази грешка. В повечето случаи грешката "Типът, дефиниран от потребителя, не е дефиниран" се дължи на правописна грешка при декларирането на променливите.
Разгледайте следните редове от кодове.
Sub User_Defined_Type_not_Defined() Dim Name As Strng Name = "ExcelWIKI" MsgBox Name End Sub
Ако стартирате този код, ще получите поле за грешка, което ви уведомява за наличието на грешка "Тип, дефиниран от потребителя, не е дефиниран". Наред с това ще намерите и втория ред от кода, подчертан в синьо, където написах "strng" на мястото на "низ" .
Надявам се, че сте разбрали за какво става дума. VBA не можа да разпознае типа на променливата "strng" , затова я сметна за нов тип променлива и помисли, че сте я дефинирали някъде. Но когато установи, че не сте я декларирали никъде, обяви грешка.
Следователно, докато изпълнявате прости VBA кодове, ако все пак срещнете тази грешка, първо проверете изписването на всички типове променливи.
2. Липса на правилно позоваване
Друга причина за тази грешка е липсата на правилно препращане. Понякога използваме някои обекти в нашите кодове, които се нуждаят от правилно препращане от Референтна кутия на Visual Basic ... В противен случай, VBA не разпознава обекта.
Вижте следното VBA код.
Sub User_Defined_Type_not_Defined() Dim MyDictionary As Dictionary Set MyDictionary = CreateObject("Scripting.Dictionary") End Sub
Изпълнете този код. Ще получите същата стара грешка "Типът, дефиниран от потребителя, не е дефиниран", подчертаване на Обект на речника . Това е така, защото VBA не можеше да разпознае Обект на речника , и я счита за променлива, дефинирана от потребителя, която не е дефинирана погрешно.
Сега най-големият въпрос е как да се справим с тази грешка? Лесно. 2 начини за отстраняване на тази грешка.
⧪ Решение 1: Проверка на препратката към предпоставката от полето за препратка на визуалната кутия
Това е най-разумният начин за решаване на този проблем. Инструменти> Препратки бутон в Visual Basic лента. Кликнете върху Препратки .
Диалогов прозорец, наречен Препратки ще се отвори. Превъртете и намерете Изпълнение на Microsoft Scripting Runtime (Това зависи от обекта, който използвате. Обект на речника има нужда от Изпълнение на Microsoft Scripting Runtime Така че, докато използвате обект в VBA код, трябва да знаете предпоставката за разпознаването му от VBA. Посетете тази връзка за повече информация.). Проверете.
Сега се върнете и стартирайте кода. Няма да получите никакви грешки. VBA може да разпознае Обект на речника този път.
⧪ Решение 2: Деклариране като чист обект, а не като конкретен обект
Има и друг начин за решаване на този проблем: можете да декларирате обекта като чист обект, а не като Обект на речника .
Обърнете внимание на следните редове от кодове.
Sub User_Defined_Type_not_Defined() Dim MyDictionary As Object Set MyDictionary = CreateObject("Scripting.Dictionary") End Sub
Тук съм декларирал променливата MyDictionary като обикновен обект, а не като Речник. Сега, ако стартирате този код, няма да получите никаква грешка.