Cuprins
Una dintre cele mai frecvente probleme cu care ne confruntăm atunci când lucrăm cu copierea și lipirea în VBA este eroare de execuție 1004 : Metoda PasteSpecial a clasei Range a eșuat În acest articol, vă voi arăta care sunt posibilele motive din spatele acestei erori și cum să le rezolvați, cu exemple și ilustrații adecvate.
Descărcați caietul de practică
Descărcați acest caiet de exerciții pentru a vă exercita în timp ce citiți acest articol.
Metoda PasteSpecial a eșuat.xlsmMetoda PasteSpecial a clasei Range a eșuat: Cauze și soluții
Fără alte întârzieri, să trecem la discuția noastră principală, și anume, care ar putea fi posibilele motive din spatele acestei erori și cum să le rezolvăm.
Motivul 1: Accesarea metodei PasteSpecial fără a copia nimic
Acesta este cel mai frecvent motiv care stă la baza erorii, adică încercarea de a accesa fișierul PasteSpecial fără a copia nimic.
Pentru a înțelege clar, verificați următoarele aspecte VBA cod.
⧭ Cod VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
Aici, am folosit PasteSpecial metoda de VBA fără a copia nimic. Astfel, Excel va afișa un eroare de execuție 1004 atunci când îl executați.
⧭ Soluție:
Pentru a rezolva această problemă, mai întâi, trebuie să copiați un interval de celule, apoi să accesați PasteSpecial metoda.
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
Atunci când executați acest cod, se vor lipi formulele din intervalul respectiv B3:B5 din foaia de lucru activă la intervalul selectat.
Citește mai mult: Metoda PasteSpecial a clasei Worksheet a eșuat (Motive & Soluții)
Motivul 2: Accesarea metodei PasteSpecial cu erori de ortografie
Acesta este un alt motiv comun care stă la baza erorii, și anume, pentru a accesa PasteSpecial cu erori de ortografie în oricare dintre argumente.
Priviți următoarele VBA Aici am făcut o greșeală de ortografie în argumentul xlPasteAll .
⧭ Cod VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlPaseAll End Sub
Atunci când executați acest cod, veți obține următorul mesaj eroare de execuție 1004 .
⧭ Soluție:
Soluția este ușoară. Sunt sigur că ați ghicit-o deja. Asigurați-vă doar că ortografia tuturor argumentelor a fost făcută corect.
Iar eroarea va dispărea automat.
Citește mai mult: Cum să utilizați comanda specială Paste Special în Excel (5 moduri adecvate)
Lecturi similare
- Excel VBA: Copierea intervalului în alt registru de lucru
- Copierea și lipirea valorilor în următorul rând gol cu Excel VBA (3 exemple)
- Aplicați VBA PasteSpecial și păstrați formatarea sursei în Excel
- Cum să copiați aceeași valoare în mai multe celule din Excel (4 metode)
- Excel VBA pentru a copia rândurile într-o altă foaie de lucru în funcție de criterii
Motivul 3: Deschiderea unui nou registru de lucru după copiere care anulează modul Copy/Paste
Acesta este un alt motiv important care stă la baza erorii, și anume, să faceți ceva care să anuleze modul de copiere/lipire înainte de lipire.
Priviți următorul cod pentru a înțelege clar.
⧭ Cod VBA:
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
Aici am copiat intervalul B3:B5 de la Foaie1 a unui registru de lucru numit Caiet de lucru1 .
Apoi am creat un nou registru de lucru numit Caiet de lucru2 în același dosar și am încercat să lipesc intervalul copiat în intervalul B3:B5 de Foaie1 din registrul de lucru respectiv.
Dar atunci când rulăm codul, se va afișa un mesaj Metoda PasteSpecial a clasei Range a eșuat Eroare, pentru că în momentul în care creăm noul registru de lucru, se va crea un nou registru de lucru. modul copy/paste vor fi anulate.
⧭ Soluție:
Pentru a rezolva această problemă, mai întâi, scrieți liniile de cod pentru a crea noul registru de lucru numit Caiet de lucru2 .
Apoi introduceți liniile pentru a activa Caiet de lucru1 și copiați intervalul dorit din acesta.
Și în cele din urmă, activați Caiet de lucru2 și lipiți acolo intervalul copiat.
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
Rulați acest cod. Va copia intervalul B3:B5 de la Foaie1 de Caietul de lucru1.
Și lipiți-o în Foaie1 din registrul de lucru nou creat numit Caiet de lucru2 .
⧭ Precauție:
Evident, nu uitați să păstrați Caiet de lucru1 deschis în timpul rulării codului.
Citește mai mult: Cum să dezactivați Copy and Paste în Excel fără macro-uri (cu 2 criterii)
Motivul 4: Schimbarea Application.CutCopyMode la False care anulează modul Copy/Paste
În cele din urmă, este posibil să existe un alt motiv pentru care se produce eroarea. Putem dezactiva funcția Aplicație.CutCopyMode din greșeală înainte de a accesa PasteSpecial metoda.
Deși nu este o practică foarte comună, totuși, uneori o facem atunci când trebuie să lucrăm cu un număr mare de replici.
Vezi codul următor pentru a înțelege clar. Aici am copiat intervalul B3:B5 , dar a anulat CutCopyMode înainte de a-l lipi.
⧭ Cod VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Application.CutCopyMode = False Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Atunci când veți rula codul, va fi afișat codul Metoda PasteSpecial a clasei Range a eșuat eroare.
⧭ Soluție:
Cred că până acum ați ghicit cu toții soluția. Este destul de simplu de fapt. Trebuie doar să eliminați linia din codul care transformă CutCopy modul oprit.
Deci, corect VBA codul va fi:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Se va copia intervalul B3:B5 și o lipiți peste D3:D5 fără nicio problemă.
Citește mai mult: VBA Paste Special pentru a copia valori și formate în Excel (9 exemple)
Lucruri de reținut
Aici am arătat doar problemele pe care le puteți întâmpina în timp ce lucrați cu PasteSpecial metoda din VBA. Dacă doriți să cunoașteți PasteSpecial în detaliu, vizitați acest link .
Concluzie
Așadar, pe scurt, acestea sunt motivele care pot provoca eroare de execuție 1004: Metoda PasteSpecial din clasa Range a eșuat în codul dvs. Sper că ați înțeles clar toate punctele și că acestea vă vor fi de mare ajutor în viitor. Cunoașteți și alte motive? Și mai aveți probleme? Nu ezitați să ne întrebați. Și nu uitați să vizitați site-ul nostru ExcelWIKI pentru mai multe postări și actualizări.