Форум по VBA, Excel и Word

VBA, Excel => VBA, макросы в Excel => Тема начата: Посетитель от 07 октября 2022, 15:36

Название: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 15:36
Добрый день!

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

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

Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Администратор от 07 октября 2022, 15:52
Потому что у объекта Range нет метода Paste. Об этом так и говорится в сообщении: Объект не поддерживает это свойство или метод.
У объекта Range есть метод PasteSpecial.

У объекта Worksheet есть метод Paste:
Dim Лист As Worksheet
Лист.Paste Destination:=Range("A1"), Link:=False
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 16:09
Worksheets("Лист5").Cells(12, 2).Copy
Worksheet.Paste Destination:=Worksheets("ШифрANR").Range("B275"), link:=False

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

Можно ли использовать .cells() вместо .range() ?
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 16:11
ошибка 424
Object required

выделяется 2-я строка (с Paste)
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Администратор от 07 октября 2022, 16:14
Здесь вместо Worksheet нужно указать конкретный лист, на который надо вставить:
Worksheet.Paste
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 16:21
Worksheets("Лист5").Cells(12, 2).Copy
Worksheets("ШифрANR").Paste Destination:=Range("B275"), link:=False
Снова ошибка во второй строке.

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

Может это возможно решить с помощью свойства resize?
Но у меня ничего не вышло...
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Администратор от 07 октября 2022, 16:23
Сделайте скрин ошибки.
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 16:52
во вложении.

разный размер ячеек откуда копируют и куда вставляют точно не мешает (писал выше)?
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Администратор от 07 октября 2022, 16:54
Я имел ввиду текст ошибки, т.е. скрин сообщения, в котором текст ошибки.
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 17:18
ошибка 1004
во вложении
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Администратор от 07 октября 2022, 17:21
Здесь возможно перед Range("B275") нужно указать лист Worksheets("ШифрANR"). Иначе сейчас подставляется активный лист и происходит нестыковка: копируется из листа "ШифрANR", а пытается вставить на активный лист, который не является листом "ШифрANR".
Worksheets("ШифрANR").Paste Destination:=Range("B275"), link:=False
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 17:45
Неа, не работает. См. скриншот.

У меня получилось другим способом. Получилось случайно :)
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). Одна объединенная другая нет.
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Администратор от 07 октября 2022, 17:55
Я был не прав, в параметре Destination можно указать любой лист, а не обязательно тот, который указан в начале.
Если у вас всё работает, то нет смысла с этим разбираться.
Название: Re: VBA операция вставить .paste Ошибка 438
Отправлено: Посетитель от 07 октября 2022, 18:02
Хорошо, спасибо большое Вам!