Грешка по време на изпълнение 1004: Методът PasteSpecial на класа Range се провали

  • Споделя Това
Hugh West

Един от най-често срещаните проблеми, с които се сблъскваме при работа с копиране и поставяне във VBA е грешка по време на изпълнение 1004 : Неуспешен метод PasteSpecial на клас Range В тази статия ще ви покажа какви са възможните причини за тази грешка и как да ги отстраните с подходящи примери и илюстрации.

Изтегляне на работна тетрадка за практика

Изтеглете тази учебна тетрадка, за да се упражнявате, докато четете тази статия.

Неуспешен метод PasteSpecial.xlsm

Неуспешен метод PasteSpecial на клас Range: причини и решения

Без да се бавим повече, нека преминем към основната ни дискусия. Тоест какви са възможните причини за тази грешка и как да ги отстраним.

Причина 1: Достъп до метода PasteSpecial, без да копирате нищо

Това е най-честата причина за грешката. Тоест, опитът за достъп до PasteSpecial метод, без да копирате нищо.

За да го разберете ясно, проверете следното VBA код.

⧭ Код VBA:

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

Тук използвахме PasteSpecial метод на VBA без да копирате нищо. Така Excel ще покаже грешка по време на изпълнение 1004 когато го стартирате.

⧭ Решение:

За да решите този проблем, първо трябва да копирате диапазон от клетки, след което да получите достъп до PasteSpecial метод.

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

Когато стартирате този код, той ще вмъкне формулите на диапазона B3:B5 на активния работен лист към избрания диапазон.

Прочетете още: Специалният метод PasteSpecial на класа на работния лист се провали (причини & решения)

Причина 2: Достъп до метода PasteSpecial с правописна грешка

Това е друга често срещана причина за грешката. Тоест, за да получите достъп до PasteSpecial метод с правописна(и) грешка(и) в някой от аргументите.

Вижте следното VBA Тук сме допуснали правописна грешка в аргумента xlPasteAll .

⧭ Код VBA:

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

Когато стартирате този код, ще получите следното грешка по време на изпълнение 1004 .

⧭ Решение:

Решението е лесно. сигурен съм, че вече сте се досетили за това. Просто се уверете, че правописът на всички аргументи е направен правилно.

И грешката автоматично ще изчезне.

Прочетете още: Как да използвате специалната команда Paste в Excel (5 подходящи начина)

Подобни четива

  • Excel VBA: Копиране на обхват в друга работна книга
  • Копиране и поставяне на стойности на следващия празен ред с Excel VBA (3 примера)
  • Прилагане на VBA PasteSpecial и запазване на форматирането на източника в Excel
  • Как да копирате една и съща стойност в няколко клетки в Excel (4 метода)
  • Excel VBA за копиране на редове в друг работен лист въз основа на критерии

Причина 3: Отваряне на нова работна книга след копиране, което отменя режима на копиране/вмъкване

Това е друга важна причина за грешката. Тоест да направите нещо, което отменя режима на копиране/вмъкване преди да поставите.

Вижте следния код, за да го разберете ясно.

⧭ Код 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:=xlPasteAllКрай на Sub 

Тук копирахме диапазона B3:B5 от Лист1 на работна книга, наречена Работна тетрадка1 .

След това създадохме нова работна книга, наречена Работна тетрадка2 в същата папка и се опитах да поставя копирания диапазон в диапазона B3:B5 на Лист1 на тази работна книга.

Но когато стартираме кода, той ще покаже Неуспешен метод PasteSpecial на клас Range Грешка, защото в момента, в който създадем новата работна книга. режим копиране/вмъкване ще бъдат отменени.

⧭ Решение:

За да решите този проблем, първо запишете редовете код за създаване на нова работна книга, наречена Работна тетрадка2 .

След това вмъкнете редовете, за да активирате Работна тетрадка1 и копирайте желания диапазон от него.

И накрая, активирайте Работна тетрадка2 и поставете копирания диапазон там.

 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 

Изпълнете този код. Той ще копира диапазона B3:B5 от Лист1 на Работна тетрадка1.

И го поставете в Лист1 на новосъздадената работна книга, наречена Работна тетрадка2 .

⧭ Предпазни мерки:

Разбира се, не забравяйте да запазите Работна тетрадка1 отворен по време на изпълнението на кода.

Прочетете още: Как да деактивирате копирането и поставянето в Excel без макроси (с 2 критерия)

Причина 4: Превръщането на Application.CutCopyMode в False, което отменя режима на копиране/вмъкване

И накрая, може да има друга причина за грешката. Може да изключим Application.CutCopyMode погрешно, преди да получите достъп до PasteSpecial метод.

Макар че това не е много разпространена практика, все пак понякога го правим, когато трябва да работим с голям брой редове.

Вижте следния код, за да го разберете ясно. Тук сме копирали диапазона B3:B5 , но отмени CutCopyMode преди да го поставите.

⧭ Код VBA:

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

Когато стартирате кода, той ще покаже Неуспешен метод PasteSpecial на клас Range грешка.

⧭ Решение:

Предполагам, че вече всички сте се досетили за решението. Всъщност то е съвсем просто. Просто премахнете реда от кода, който превръща символа CutCopy изключен режим.

Така че, правилното VBA кодът ще бъде:

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

Той ще копира диапазона B3:B5 и го поставете върху D3:D5 без никакви проблеми.

Прочетете още: Специална функция VBA Paste за копиране на стойности и формати в Excel (9 примера)

Нещата, които трябва да запомните

Тук съм показал само проблемите, с които може да се сблъскате, докато работите с PasteSpecial метод в VBA. Ако искате да знаете PasteSpecial метод в подробности, посетете тази връзка .

Заключение

Накратко, това са причините, които могат да доведат до грешка по време на изпълнение 1004: Метод PasteSpecial от класа Range се провали Надявам се, че сте разбрали ясно всички точки и те ще ви помогнат много в бъдеще. Знаете ли други причини? И имате ли някакви проблеми? Не се колебайте да ни попитате. И не забравяйте да посетите нашия сайт ExcelWIKI за повече публикации и актуализации.

Хю Уест е опитен обучител и анализатор на Excel с над 10 години опит в индустрията. Има бакалавърска степен по счетоводство и финанси и магистърска степен по бизнес администрация. Хю има страст към преподаването и е разработил уникален подход на преподаване, който е лесен за следване и разбиране. Неговите експертни познания по Excel са помогнали на хиляди студенти и професионалисти по целия свят да подобрят уменията си и да постигнат отлични резултати в кариерата си. Чрез своя блог Хю споделя знанията си със света, като предлага безплатни уроци за Excel и онлайн обучение, за да помогне на хората и фирмите да достигнат пълния си потенциал.