Denna handledning kommer att förklara VBA-fel 1004- programdefinierat eller objektdefinierat fel.
VBA-körtidsfel 1004 är känt som ett programdefinierat eller objektdefinierat fel som uppstår medan koden körs. Att göra kodfel (se vår felhanteringsguide) är en viktig del av att lära sig VBA, men att veta varför ett fel uppstår hjälper dig att undvika att göra fel i framtida kodning.
VBA -fel 1004 - Objektet existerar inte
Om vi hänvisar till ett objekt i vår kod, till exempel ett intervallnamn som inte har definierats, kan detta fel uppstå eftersom VBA -koden inte kan hitta namnet.
12345678 | Sub CopyRange ()Dim CopyFrom As RangeDim CopyTo As RangeAnge CopyFrom = Sheets (1) .Range ("CopyFrom")Ange CopyTo = Sheets (1) .Range ("CopyTo")CopyFrom.CopyCopyTo.PasteSpecial xlPasteValuesAvsluta Sub |
Exemplet ovan kommer att kopiera värdena från det namngivna intervallet "CopyFrom" till det namngivna intervallet "CopyTo" - förutsatt att detta är befintliga namngivna intervall! Om de inte finns visas fel 1004.
Det enklaste sättet att undvika detta fel i exemplet ovan är att skapa intervallnamnen i Excel -arbetsboken, eller hänvisa till intervallet i det traditionella rad- och kolumnformatet t.ex. Område ("A1: A10").
VBA -fel 1004 - Namn som redan tagits
Felet kan också uppstå om du försöker byta namn på ett objekt till ett objekt som redan finns - till exempel om vi försöker byta namn på Sheet1 men namnet du ger arket redan är namnet på ett annat blad.
123 | Sub NameWorksheet ()ActiveSheet.Name = "Sheet2"Avsluta Sub |
Om vi redan har en Sheet2 kommer felet att inträffa.
VBA -fel 1004 - Felaktigt hänvisning till ett objekt
Felet kan också uppstå när du felaktigt har refererat till ett objekt i din kod. Till exempel:
12345678 | Sub CopyRange ()Dim CopyFrom As RangeDim CopyTo As RangeAnge CopyFrom = Range ("A1: A10")Ange CopyTo = Range ("C1: C10")Område (CopyFrom) .CopyOmråde (CopyTo) .PasteSpecial xlPasteValuesAvsluta Sub |
Detta kommer återigen att ge oss fel 10004
Korrigera koden, så visas felet inte längre.
12345678 | Sub CopyRange ()Dim CopyFrom As RangeDim CopyTo As RangeAnge CopyFrom = Range ("A1: A10")Ange CopyTo = Range ("C1: C10")CopyFrom.CopyCopyTo.PasteSpecial xlPasteValuesAvsluta Sub |
VBA -fel 1004 - Objektet hittades inte
Detta fel kan också uppstå när vi försöker öppna en arbetsbok och arbetsboken inte hittas - arbetsboken i det här fallet är objektet som inte hittas.
1234 | Sub OpenFile ()Dim wb Som arbetsbokAnge wb = Workbooks.Open ("C: \ Data \ TestFile.xlsx")Avsluta Sub |
Även om meddelandet kommer att vara annorlunda i felrutan, är felet fortfarande 1004.