VBA операция вставить .paste Ошибка 438

Автор Посетитель, 07 октября 2022, 15:36

Посетитель

Добрый день!

Подскажите в чем ошибка? (см. скриншот)
Ошибка 438
Object doesn't support this property or method

Вроде простая операция вставить


Администратор

Потому что у объекта Range нет метода Paste. Об этом так и говорится в сообщении: Объект не поддерживает это свойство или метод.
У объекта Range есть метод PasteSpecial.

У объекта Worksheet есть метод Paste:
Dim Лист As Worksheet
Лист.Paste Destination:=Range("A1"), Link:=False

Посетитель

Worksheets("Лист5").Cells(12, 2).Copy
Worksheet.Paste Destination:=Worksheets("ШифрANR").Range("B275"), link:=False

Так? Но у меня снова ошибка.

Можно ли использовать .cells() вместо .range() ?

Посетитель

ошибка 424
Object required

выделяется 2-я строка (с Paste)

Администратор

Здесь вместо Worksheet нужно указать конкретный лист, на который надо вставить:
Worksheet.Paste

Посетитель

Worksheets("Лист5").Cells(12, 2).Copy
Worksheets("ШифрANR").Paste Destination:=Range("B275"), link:=False
Снова ошибка во второй строке.

Может дело в том что на Листе 5 ячейка B12 объединенная ( т.е. занимает диапазон B12:U12)
А на листе ШифрANR она самостоятельная B275 (одиночная)

Может это возможно решить с помощью свойства resize?
Но у меня ничего не вышло...

Администратор


Посетитель

во вложении.

разный размер ячеек откуда копируют и куда вставляют точно не мешает (писал выше)?

Администратор

Я имел ввиду текст ошибки, т.е. скрин сообщения, в котором текст ошибки.

Посетитель

ошибка 1004
во вложении

Администратор

Здесь возможно перед Range("B275") нужно указать лист Worksheets("ШифрANR"). Иначе сейчас подставляется активный лист и происходит нестыковка: копируется из листа "ШифрANR", а пытается вставить на активный лист, который не является листом "ШифрANR".
Worksheets("ШифрANR").Paste Destination:=Range("B275"), link:=False

Посетитель

Неа, не работает. См. скриншот.

У меня получилось другим способом. Получилось случайно :)
Sheets("Лист5").Range("B12").Resize(1, 1).Copy Sheets("ШифрANR").Range("B275")

Полный алгоритм такой:
Select Case Worksheets("Лист5").Cells(13, 2).Value
        Case Is = "ANR"
            Worksheets("ШифрANR").Cells(275, 2).ClearContents
            Sheets("Лист5").Range("B12").Resize(1, 1).Copy Sheets("ШифрANR").Range("B275")
        Case Is = "ANP"
            Worksheets("ШифрANP").Cells(275, 2).ClearContents
            Sheets("Лист5").Range("B12").Resize(1, 1).Copy Sheets("ШифрANP").Range("B275")
    End Select
     Application.CutCopyMode = False

Но все же мне интересно как правильно записать способом выше, над которым вы трудитесь ...

P.S. Видимо правда проблема в разном размере ячеек: откуда копируем (B12:U12) и куда вставляем (В275). Одна объединенная другая нет.

Администратор

Я был не прав, в параметре Destination можно указать любой лист, а не обязательно тот, который указан в начале.
Если у вас всё работает, то нет смысла с этим разбираться.

Посетитель