Ynhâldsopjefte
Ien fan 'e meast foarkommende flaters dy't wy tsjinkomme by it wurkjen mei VBA yn Excel is dat it troch de brûker definieare type net definiearre is. Yn dit artikel sil ik jo sjen litte wêrom't dizze flater feroarsake wurdt en hoe't jo dizze flater oplosse kinne.
Download Practice Workbook
Download dit oefenwurkboek om te oefenjen wylst jo lêze dit artikel.
Meidogger-Defined Type Not Defined.xlsm
2 Causes and Solutions to User Defined Type net definiearre yn Excel VBA
Der binne 2 grutte problemen efter dizze faaks tsjinkaam flater yn Excel VBA . Litte wy se yn detail ûndersykje en de manieren fine om se op te lossen.
1. Staveringsflater by it deklarearjen fan fariabelen
Dit is de wichtichste reden efter dizze flater. Meastentiids wurdt de flater "User-Defined Type not Defined" feroarsake troch in staveringsflater by it deklarearjen fan fariabelen.
Sjoch nei de folgjende rigels mei koades.
6549
As jo dizze koade útfiere, sille jo in flaterfakje krije dy't jo op 'e hichte bringt fan' e oanwêzigens fan 'e flater "User-Defined Type Not Defined". Dêrmei sille jo de twadde rigel fan 'e koade yn blau markearre fine, wêr't ik "strng" skreau yn plak fan "string" .
Ik hoopje dat jo it punt begripe. VBA koe it fariabele type “strng” net werkenne, dêrom beskôge it it as in nij fariabele type en tocht dat jo it earne definieare hawwe. Mar wannear't itfûn dat jo it nergens ferklearre hawwe, joech it in flater op.
Dêrom, wylst jo ienfâldige VBA -koades útfiere, as jo dizze flater dochs tsjinkomme, kontrolearje dan earst alle staveringen fan jo fariabeletypen.
2. Gebrek oan juste ferwizings
Dit is in oare oarsaak efter dizze flater. Dat is in gebrek oan goede ferwizing. Soms brûke wy guon objekten yn ús koades dy't in goede ferwizing nedich binne fanút it fak Visual Basic Reference . Oars herkent VBA it objekt net.
Sjoch nei de folgjende VBA -koade.
2589
Rinne dizze koade. Jo krije deselde âlde flater “User-Defined Type not Defined”, markearje it Dictionary-objekt . Dit komt om't VBA it Dictionary-objekt net werkenne koe, en it beskôge as in troch de brûker definiearre fariabele, dy't net ferkeard definiearre is.
No is de grutste fraach, hoe kinne jo dizze flater oplosse? Maklik. D'r binne 2 manieren om dizze flater op te lossen.
⧪ Oplossing 1: Kontrolearje de betingstferwizing út it Visual Box Reference Box
Dit is de tûkste manier om dit probleem op te lossen. Gean nei de Tools > References knop yn it Visual Basic lint. Klik op References .
In dialoochfinster mei de namme References sil iepenje. Rôlje en fyn Microsoft Scripting Runtime (Dit hinget ôf fan it objekt dat jo brûke. It Dictionaryobjekt moat Microsoft Scripting Runtime erkend wurde. Dus, by it brûken fan in objekt yn in VBA -koade, moatte jo de betingst dêrfan witte om te erkennen troch VBA. Besykje dizze keppeling foar mear ynformaasje.). Kontrolearje it.
Kom no werom en fier de koade út. Jo sille gjin flaters krije. Omdat VBA dizze kear it Dictionary-objekt werkenne kin.
⧪ Solution 2: Declaring It as a Pure Object ynstee fan in Specific Object
D'r is in oare manier om dit probleem op te lossen. Jo kinne it objekt ferklearje as in suver objekt, yn stee fan in Dictionary-objekt .
Let op de folgjende rigels fan koades.
5428
Hjir haw ik de fariabele MyDictionary ferklearre as in ienfâldich objekt, net in Dictionary. No as jo dizze koade útfiere, krije jo gjin flater.