Acest tutorial va explica eroarea VBA 1004 - eroare definită de aplicație sau eroare definită de obiect.
Eroarea de timp de execuție VBA 1004 este cunoscută ca o eroare definită de aplicație sau definită de obiect care apare în timp ce rulează codul. Efectuarea erorilor de codare (a se vedea Ghidul nostru de gestionare a erorilor) este parte integrantă a învățării VBA, dar cunoașterea de ce apare o eroare vă ajută să evitați erorile în codarea viitoare.
Eroare VBA 1004 - Obiectul nu există
Dacă ne referim la un obiect din codul nostru, cum ar fi un nume de gamă care nu a fost definit, atunci această eroare poate apărea deoarece codul VBA nu va putea găsi numele.
12345678 | Sub CopyRange ()Dim CopyFrom As RangeReduceți copierea ca intervalSetați CopyFrom = Sheets (1) .Range ("CopyFrom")Set CopyTo = Sheets (1) .Range ("CopyTo")CopyFrom.CopyCopyTo.PasteSpecial xlPasteValuesSfârșitul Sub |
Exemplul de mai sus va copia valorile din intervalul numit „CopyFrom” în intervalul numit „CopyTo” - cu condiția, desigur, ca acestea să fie intervale denumite existente! Dacă nu există, atunci se va afișa Eroarea 1004.
Cea mai simplă modalitate de a evita această eroare în exemplul de mai sus este să creați numele intervalului în registrul de lucru Excel sau să consultați intervalul în formatul tradițional de rând și coloană, de exemplu: Gama („A1: A10”).
Eroare VBA 1004 - numele deja luat
Eroarea poate apărea și dacă încercați să redenumiți un obiect cu un obiect care există deja - de exemplu, dacă încercăm să redenumiți Sheet1, dar numele pe care îl dați foii este deja numele unei alte foi.
123 | Sub Nume Foaie de lucru ()ActiveSheet.Name = "Sheet2"Sfârșitul Sub |
Dacă avem deja o Foaie2, atunci va apărea eroarea.
Eroare VBA 1004 - Referirea incorectă a unui obiect
Eroarea poate apărea și atunci când ați făcut referire incorectă la un obiect din cod. De exemplu:
12345678 | Sub CopyRange ()Dim CopyFrom As RangeReduceți copierea ca intervalSetați CopyFrom = Range („A1: A10”)Setați CopyTo = Range („C1: C10”)Range (CopyFrom) .CopyRange (CopyTo) .PasteSpecial xlPasteValuesSfârșitul Sub |
Acest lucru ne va da din nou Eroarea 10004
Corectați codul și eroarea nu va mai fi afișată.
12345678 | Sub CopyRange ()Dim CopyFrom As RangeReduceți copierea ca intervalSetați CopyFrom = Range („A1: A10”)Setați CopyTo = Range („C1: C10”)CopyFrom.CopyCopyTo.PasteSpecial xlPasteValuesSfârșitul Sub |
Eroare VBA 1004 - obiectul nu a fost găsit
Această eroare poate apărea și atunci când încercăm să deschidem un registru de lucru și registrul de lucru nu este găsit - registrul de lucru în acest caz fiind obiectul care nu a fost găsit.
1234 | Sub OpenFile ()Dim wb Ca registru de lucruSetați wb = Workbooks.Open ("C: \ Data \ TestFile.xlsx")Sfârșitul Sub |
Deși mesajul va fi diferit în caseta de eroare, eroarea este încă 1004.