Оглавление
Одна из самых распространенных проблем, с которыми мы сталкиваемся при работе с копирование и вставка в 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 для получения новых сообщений и обновлений.