Съдържание
Един от най-често срещаните проблеми, с които се сблъскваме при работа с копиране и поставяне във 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 за повече публикации и актуализации.