Run Time Error 1004: PasteSpecial Method of Range Class Failed

  • Поделись Этим
Hugh West

Одна из самых распространенных проблем, с которыми мы сталкиваемся при работе с копирование и вставка в VBA это ошибка времени выполнения 1004 : Сбой метода PasteSpecial класса Range В этой статье я расскажу вам о возможных причинах этой ошибки и о том, как их решить, с соответствующими примерами и иллюстрациями.

Скачать Практическое пособие

Скачайте эту рабочую тетрадь для тренировок, чтобы заниматься во время чтения этой статьи.

PasteSpecial Method Failed.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 Method of Worksheet Class Failed (причины & решения)

Причина 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 .

⧭ Решение:

Решение простое. Уверен, вы уже догадались. Просто убедитесь, что все аргументы написаны правильно.

И ошибка автоматически исчезнет.

Читать далее: Как использовать специальную команду "Вставить" в 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:=xlPasteAllEnd 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 Special для копирования значений и форматов в Excel (9 примеров)

О чем следует помнить

Здесь я показал только те проблемы, с которыми вы можете столкнуться при работе с PasteSpecial метод в VBA. Если вы хотите узнать PasteSpecial метод в деталях, посетите эта ссылка .

Заключение

Итак, вкратце, вот причины, которые могут вызвать ошибка времени выполнения 1004: PasteSpecial Method od Range Class Failed в вашем коде. Я надеюсь, что вы поняли все пункты, и они помогут вам в будущем. Знаете ли вы другие причины? И есть ли у вас какие-либо проблемы? Не стесняйтесь спрашивать нас. И не забудьте посетить наш сайт ExcelWIKI для получения новых сообщений и обновлений.

Хью Уэст — опытный тренер и аналитик Excel с более чем 10-летним опытом работы в отрасли. Он имеет степень бакалавра в области бухгалтерского учета и финансов и степень магистра делового администрирования. Хью страстно любит преподавать и разработал уникальный подход к обучению, которому легко следовать и который легко понять. Его экспертные знания Excel помогли тысячам студентов и специалистов по всему миру улучшить свои навыки и преуспеть в своей карьере. В своем блоге Хью делится своими знаниями со всем миром, предлагая бесплатные учебные пособия по Excel и онлайн-обучение, чтобы помочь отдельным лицам и компаниям полностью раскрыть свой потенциал.