Vykdymo laiko klaida 1004: nepavyko įterpti diapazono klasės specialaus metodo

  • Pasidalinti
Hugh West

Viena dažniausių problemų, su kuriomis susiduriame dirbdami su kopijavimas ir įklijavimas VBA yra paleidimo laiko klaida 1004 : Nepavyko įdiegti "PasteSpecial" metodo "Range" klasėje Šiame straipsnyje parodysiu, kokios galimos šios klaidos priežastys ir kaip jas išspręsti, pateiksiu tinkamų pavyzdžių ir iliustracijų.

Atsisiųsti praktikos sąsiuvinį

Atsisiųskite šį pratybų sąsiuvinį, kad galėtumėte atlikti pratimus skaitydami šį straipsnį.

PasteSpecial metodas nepavyko.xlsm

Nepavykęs diapazono klasės "PasteSpecial" metodas: priežastys ir sprendimai

Nieko nelaukdami pereikime prie pagrindinės diskusijos, t. y. kokios gali būti galimos šios klaidos priežastys ir kaip jas išspręsti.

1 priežastis: prieiga prie PasteSpecial metodo nieko nekopijuojant

Tai dažniausiai pasitaikanti klaidos priežastis. Tai reiškia, kad bandant pasiekti PasteSpecial metodą nieko nekopijuojant.

Kad jį aiškiai suprastumėte, patikrinkite šiuos dalykus VBA kodas.

⧭ VBA kodas:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub 

Čia naudojome PasteSpecial metodas VBA nieko nekopijuojant. Taigi "Excel" rodys vykdymo klaida 1004 kai jį paleidžiate.

⧭ Sprendimas:

Norėdami išspręsti šią problemą, pirmiausia turite nukopijuoti ląstelių intervalą, tada pasiekti PasteSpecial metodas.

 Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub 

Paleidus šį kodą, bus įklijuotos diapazono formulės B3:B5 aktyvaus darbalapio į pasirinktą intervalą.

Skaityti daugiau: Nepavyko įklijuoti specialiojo metodo "Worksheet" klasėje (priežastys ir sprendimai)

2 priežastis: prieiga prie PasteSpecial metodo su rašybos klaida

Tai dar viena dažna klaidos priežastis. Tai yra, norint pasiekti PasteSpecial metodas, kurio bet kuriame argumente yra rašybos klaida (-os).

Pažvelkite į VBA kodą, kad jis būtų aiškus. Čia argumente padarėme rašybos klaidą xlPasteAll .

⧭ VBA kodas:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlPaseAll End Sub 

Kai paleisite šį kodą, gausite vykdymo klaida 1004 .

⧭ Sprendimas:

Sprendimas paprastas. Esu tikras, kad jau atspėjote. Tik įsitikinkite, kad visi argumentai parašyti teisingai.

Klaida automatiškai išnyks.

Skaityti daugiau: Kaip naudoti specialiąją komandą "Paste" programoje "Excel" (5 tinkami būdai)

Panašūs skaitiniai

  • "Excel VBA": diapazono kopijavimas į kitą sąsiuvinį
  • Verčių kopijavimas ir įklijavimas į kitą tuščią eilutę naudojant "Excel VBA" (3 pavyzdžiai)
  • Taikyti VBA PasteSpecial ir išlaikyti šaltinio formatavimą "Excel" programoje
  • Kaip nukopijuoti tą pačią reikšmę keliose "Excel" ląstelėse (4 metodai)
  • "Excel VBA" eilučių kopijavimas į kitą darbalapį pagal kriterijus

3 priežastis: po kopijavimo atidarius naują sąsiuvinį, panaikinamas kopijavimo ir įkėlimo režimas

Tai yra dar viena svarbi klaidos priežastis. Tai yra, prieš įklijuojant reikia atlikti veiksmus, kurie panaikina kopijavimo / įkėlimo režimą.

Aiškiai pažvelkite į toliau pateiktą kodą, kad jį suprastumėte.

⧭ VBA kodas:

 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:=xlPasteAllPabaiga Sub 

Čia nukopijavome diapazoną B3:B5 1 lapas darbaknygės, pavadintos Darbo knyga1 .

Tada sukūrėme naują sąsiuvinį, pavadintą Darbo knyga2 tame pačiame aplanke ir bandė nukopijuotą diapazoną įklijuoti į diapazoną B3:B5 1 lapas to sąsiuvinio.

Tačiau paleidus kodą bus rodomas Nepavyko įdiegti "PasteSpecial" metodo "Range" klasėje Klaida, nes, kai sukuriame naują sąsiuvinį. kopijavimo ir įkėlimo režimas bus atšauktas.

⧭ Sprendimas:

Norėdami išspręsti šią problemą, pirmiausia įrašykite kodo eilutes, kad sukurtumėte naują sąsiuvinį, pavadintą Darbo knyga2 .

Tada įterpkite eilutes, kad suaktyvintumėte Darbo knyga1 ir nukopijuokite iš jo norimą diapazoną.

Ir galiausiai suaktyvinkite Darbo knyga2 ir įklijuokite nukopijuotą diapazoną.

 Sub PasteSpecial_Method_of_Range_Class_Failed() Dim Workbook2 As Workbook Set Workbook2 = Workbook2.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 

Paleiskite šį kodą. Jis nukopijuos diapazoną B3:B5 1 lapas Darbo knyga1.

Ir įklijuokite jį į 1 lapas naujai sukurtame sąsiuvinyje, pavadintame Darbo knyga2 .

⧭ Atsargumo priemonės:

Žinoma, nepamirškite saugoti Darbo knyga1 atidarytas vykdant kodą.

Skaityti daugiau: Kaip išjungti kopijavimą ir įklijavimą programoje "Excel" be makrokomandų (su 2 kriterijais)

4 priežastis: įjungus Application.CutCopyMode į False, atšaukiamas kopijavimo / įklijavimo režimas

Galiausiai, gali būti dar viena klaidos atsiradimo priežastis. Galime išjungti Application.CutCopyMode klaidingai prieš prisijungdami prie PasteSpecial metodas.

Nors tai nėra labai dažna praktika, vis dėlto kartais tai darome, kai tenka dirbti su daugybe eilučių.

Aiškiau tai suprasite iš toliau pateikto kodo. Čia nukopijavome diapazoną B3:B5 , bet atšaukė CutCopyMode prieš jį įklijuodami.

⧭ VBA kodas:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Application.CutCopyMode = False Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub 

Kai paleisite kodą, bus rodomas Nepavyko įdiegti "PasteSpecial" metodo "Range" klasėje klaida.

⧭ Sprendimas:

Spėju, kad dabar jau visi atspėjote sprendimą. Iš tikrųjų jis gana paprastas. Tiesiog pašalinkite iš kodo eilutę, kuri paverčia CutCopy režimas išjungtas.

Taigi, teisingas VBA kodas bus:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub 

Jis nukopijuos diapazoną B3:B5 ir įklijuokite jį ant D3:D5 be jokių problemų.

Skaityti daugiau: VBA specialusis įterpimas, skirtas kopijuoti vertes ir formatus "Excel" programoje (9 pavyzdžiai)

Dalykai, kuriuos reikia prisiminti

Čia parodžiau tik problemas, su kuriomis galite susidurti dirbdami su PasteSpecial metodas VBA. Jei norite sužinoti PasteSpecial metodą, apsilankykite šią nuorodą .

Išvada

Taigi, trumpai tariant, tai yra priežastys, dėl kurių vykdymo klaida 1004: "PasteSpecial" metodas nuo diapazono klasės nepavyko savo kode. Tikiuosi, kad aiškiai supratote visus punktus ir jie jums labai padės ateityje. Ar žinote kokių nors kitų priežasčių? Ir ar turite kokių nors problemų? Drąsiai klauskite mūsų. Ir nepamirškite apsilankyti mūsų svetainėje ExcelWIKI daugiau pranešimų ir atnaujinimų.

Hugh Westas yra labai patyręs Excel treneris ir analitikas, turintis daugiau nei 10 metų patirtį šioje srityje. Jis yra įgijęs apskaitos ir finansų bakalauro bei verslo administravimo magistro laipsnius. Hugh turi aistrą mokymui ir sukūrė unikalų mokymo metodą, kurį lengva sekti ir suprasti. Jo ekspertinės žinios apie „Excel“ padėjo tūkstančiams studentų ir specialistų visame pasaulyje tobulinti savo įgūdžius ir tobulėti savo karjeroje. Savo tinklaraštyje Hugh dalijasi savo žiniomis su pasauliu, siūlydamas nemokamus „Excel“ vadovėlius ir internetinius mokymus, kad padėtų asmenims ir įmonėms išnaudoti visą savo potencialą.