Deze tutorial legt de VBA Error 1004- Application-Defined of Object-Defined Error uit.
VBA-runtimefout 1004 staat bekend als een door een toepassing gedefinieerde of door een object gedefinieerde fout die optreedt terwijl de code wordt uitgevoerd. Codeerfouten maken (zie onze Error Handling Guide) is een essentieel onderdeel van het leren van VBA, maar als u weet waarom een fout optreedt, kunt u voorkomen dat u fouten maakt bij toekomstige codering.
VBA-fout 1004 - Object bestaat niet
Als we verwijzen naar een object in onze code, zoals een bereiknaam die niet is gedefinieerd, kan deze fout optreden omdat de VBA-code de naam niet kan vinden.
12345678 | Sub CopyRange()Dim kopiërenVan als bereikDim kopiëren naar als bereikSet CopyFrom = Sheets(1).Range("CopyFrom")Set CopyTo = Sheets(1).Range("CopyTo")KopiërenVan.KopiërenCopyTo.PasteSpecial xlPasteValuesEinde sub |
Het bovenstaande voorbeeld kopieert de waarden van het benoemde bereik "CopyFrom" naar het benoemde bereik "CopyTo" - op voorwaarde natuurlijk dat dit bestaande benoemde bereiken zijn! Als ze niet bestaan, wordt Error 1004 weergegeven.
De eenvoudigste manier om deze fout in het bovenstaande voorbeeld te voorkomen, is door de bereiknamen in de Excel-werkmap te maken of om naar het bereik te verwijzen in de traditionele rij- en kolomindeling, bijvoorbeeld: Bereik ("A1:A10").
VBA-fout 1004 - Naam al in gebruik
De fout kan ook optreden als u probeert een object te hernoemen naar een object dat al bestaat - bijvoorbeeld als we Blad1 proberen te hernoemen, maar de naam die u aan het blad geeft al de naam is van een ander blad.
123 | SubnaamWerkblad()ActiveSheet.Name = "Blad2"Einde sub |
Als we al een Sheet2 hebben, zal de fout optreden.
VBA-fout 1004 - Onjuist verwijzen naar een object
De fout kan ook optreden wanneer u ten onrechte naar een object in uw code hebt verwezen. Bijvoorbeeld:
12345678 | Sub CopyRange()Dim kopiërenVan als bereikDim kopiëren naar als bereikStel CopyFrom = Range ("A1:A10") inStel CopyTo = Range ("C1:C10") inBereik(KopiërenVan).KopiërenBereik (KopiërenTo).PlakkenSpecial xlPasteValuesEinde sub |
Dit geeft ons opnieuw de Error 10004
Corrigeer de code en de fout wordt niet meer weergegeven.
12345678 | Sub CopyRange()Dim kopiërenVan als bereikDim kopiëren naar als bereikStel CopyFrom = Range ("A1:A10") inStel CopyTo = Range ("C1:C10") inKopiërenVan.KopiërenCopyTo.PasteSpecial xlPasteValuesEinde sub |
VBA-fout 1004 - Object niet gevonden
Deze fout kan ook optreden wanneer we proberen een werkmap te openen en de werkmap is niet gevonden - de werkmap is in dit geval het object dat niet is gevonden.
1234 | Sub-OpenFile()Dim wb als werkboekStel wb = Workbooks.Open("C:\Data\TestFile.xlsx") inEinde sub |
Hoewel het bericht in het foutvenster anders zal zijn, is de fout nog steeds 1004.