Indholdsfortegnelse
Et af de mest almindelige problemer, som vi støder på, når vi arbejder med kopiering og indsættelse i VBA er den køretidsfejl 1004 : PasteSpecial-metoden for Range-klassen mislykkedes I denne artikel vil jeg vise dig, hvilke mulige årsager der kan ligge bag denne fejl, og hvordan du løser dem med gode eksempler og illustrationer.
Download arbejdsbog til øvelser
Download denne arbejdsbog til træning, så du kan øve dig, mens du læser denne artikel.
IndsætSærlig metode mislykkedes.xlsmPasteSpecial-metoden for Range Class mislykkedes: Årsager og løsninger
Lad os uden yderligere forsinkelse gå videre til vores hoveddiskussion, nemlig hvad der kan være de mulige årsager til denne fejl, og hvordan man løser dem.
Årsag 1: Adgang til PasteSpecial-metoden uden at kopiere noget som helst
Dette er den mest almindelige årsag til fejlen. Det vil sige, at forsøg på at få adgang til den PasteSpecial metode uden at kopiere noget.
For at forstå det klart, skal du kontrollere følgende VBA kode.
⧭ VBA-kode:
Sub PasteSpecial_Method_of_Range_Class_Failed() Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
Her har vi brugt PasteSpecial metode til VBA uden at kopiere noget. Så Excel vil vise en køretidsfejl 1004 når du kører den.
⧭ Løsning:
For at løse dette problem skal du først kopiere et område af celler og derefter få adgang til PasteSpecial metode.
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
Når du kører denne kode, indsætter den formlerne i området B3:B5 i det aktive regneark til det valgte område.
Læs mere: PasteSpecial-metoden i regnearksklassen mislykkedes (Årsager & Løsninger)
Årsag 2: Adgang til PasteSpecial-metoden med stavefejl
Dette er en anden almindelig årsag til fejlen. Det vil sige, at for at få adgang til PasteSpecial metode med stavefejl i et eller flere af argumenterne.
Se på følgende VBA kode for at gøre det klart. Her har vi lavet en stavefejl i argumentet xlPasteAll .
⧭ VBA-kode:
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlPaseAll End Sub
Når du kører denne kode, får du følgende køretidsfejl 1004 .
⧭ Løsning:
Løsningen er nem, det har du sikkert allerede gættet. Du skal bare sørge for, at alle argumenter er stavet korrekt.
Fejlen vil automatisk forsvinde.
Læs mere: Sådan bruger du indsæt specialkommandoen i Excel (5 egnede måder)
Lignende læsninger
- Excel VBA: Kopier område til en anden projektmappe
- Kopier og indsæt værdier til næste tomme række med Excel VBA (3 eksempler)
- Anvend VBA PasteSpecial og behold kildeformatering i Excel
- Sådan kopieres den samme værdi i flere celler i Excel (4 metoder)
- Excel VBA til at kopiere rækker til et andet regneark baseret på kriterier
Årsag 3: Åbning af en ny projektmappe efter kopiering, der annullerer kopierings-/indsætningstilstanden
Dette er en anden vigtig årsag til fejlen, nemlig at gøre noget, der annullerer copy/paste-tilstanden, før du indsætter.
Se på følgende kode for at få en klar forståelse.
⧭ VBA-kode:
Sub PasteSpecial_Method_of_Range_Class_Failed() Workbooks("Workbook1.xlsx").Worksheets("Sheet1").Range("B3:B5").Select Selection.Copy Dim Workbook2 As Workbook Set Workbook2 = Workbooks.Add Workbook2.SaveAs Filename:=ThisWorkbook.Path & "\" & "Workbook2.xlsx" Workbook2.Activate Workbook2.Unprotect Workbook2.Worksheets("Sheet1").Range("B3:B5").Select Selection.PasteSpecial Paste:=xlPasteAllEnd Sub
Her har vi kopieret området B3:B5 fra den Ark1 i en projektmappe kaldet Arbejdsbog1 .
Derefter har vi oprettet en ny projektmappe ved navn Arbejdsbog2 i den samme mappe og forsøgte at indsætte det kopierede område i området B3:B5 på Ark1 i den pågældende projektmappe.
Men når vi kører koden, vises der en PasteSpecial-metoden for Range-klassen mislykkedes Fejl, fordi i det øjeblik vi opretter den nye projektmappe, vil den kopier/indsæt-tilstand vil blive annulleret.
⧭ Løsning:
For at løse dette problem skal du først skrive de kodelinjer ned, der skal bruges til at oprette den nye projektmappe kaldet Arbejdsbog2 .
Indsæt derefter linjerne for at aktivere Arbejdsbog1 og kopier det ønskede område fra den.
Og endelig skal du aktivere Arbejdsbog2 og indsæt det kopierede område der.
Sub PasteSpecial_Method_of_Range_Class_Failed() Dim Workbook2 As Workbook Set Workbook2 = Workbooks.Add Workbook2.SaveAs Filename:=ThisWorkbook.Path & "\" & "Workbook2.xlsx" Workbooks("Workbook1.xlsx").Activate Worksheets("Sheet1").Range("B3:B5").Select Selection.Copy Workbook2.Activate Worksheets("Sheet1").Range("B3:B5").Select Selection.PasteSpecial Paste:=xlPasteAll End Sub
Kør denne kode. Den kopierer området B3:B5 fra Ark1 på Arbejdsbog1.
Og indsæt det i Ark1 i den nyligt oprettede projektmappe kaldet Arbejdsbog2 .
⧭ Forsigtighed:
Glem naturligvis ikke at holde Arbejdsbog1 åben, mens du kører koden.
Læs mere: Sådan deaktiveres kopiering og indsættelse i Excel uden makroer (med 2 kriterier)
Årsag 4: Hvis Application.CutCopyMode ændres til False, annulleres kopierings-/indsætningstilstanden
Endelig kan der være en anden årsag til, at fejlen opstår. Vi kan slukke for Application.CutCopyMode fejlagtigt, før du får adgang til den PasteSpecial metode.
Selv om det ikke er en meget almindelig praksis, gør vi det alligevel nogle gange, når vi skal arbejde med et stort antal linjer.
Se følgende kode for at forstå det klart. Her har vi kopieret området B3:B5 , men annullerede den CutCopyMode før du indsætter det.
⧭ VBA-kode:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Application.CutCopyMode = False Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Når du kører koden, vil den vise PasteSpecial-metoden for Range-klassen mislykkedes fejl.
⧭ Løsning:
Jeg går ud fra, at I nu alle har gættet løsningen. Det er faktisk ret simpelt. Du skal bare fjerne den linje fra koden, der gør CutCopy tilstand slukket.
Så den korrekte VBA kode vil være:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Den vil kopiere området B3:B5 og indsæt den over den D3:D5 uden problemer.
Læs mere: VBA Indsæt Special til at kopiere værdier og formater i Excel (9 eksempler)
Ting at huske
Her har jeg kun vist de problemer, som du kan støde på, når du arbejder med PasteSpecial metode i VBA. Hvis du ønsker at kende den PasteSpecial metode i detaljer, se dette link .
Konklusion
Så kort sagt er dette de årsager, der kan forårsage run-time error 1004: PasteSpecial Method od Range Class mislykkedes i din kode. Jeg håber, at du har forstået alle punkterne klart og tydeligt, og at de vil hjælpe dig meget i fremtiden. Kender du andre grunde? Og har du problemer? Du er velkommen til at spørge os. Og glem ikke at besøge vores hjemmeside ExcelWIKI for flere indlæg og opdateringer.