438 Ошибка вставки в активную книгу - PullRequest
0 голосов
/ 07 мая 2018

Я получаю ошибку 438 - «объект не поддерживает это свойство или метод» при попытке вставить в мою текущую книгу (последняя строка кода ниже). Я знаю, что код работает, когда я ссылаюсь на две разные книги (то есть устанавливаю две книги с помощью workbook.open), но падает, когда я пытаюсь сослаться на свою собственную с помощью ThisWorkbook. Есть идеи? Я не могу найти решение в другом месте на форуме, к сожалению. Спасибо.

Dim Data As Workbook

FName = Application.GetOpenFilename
Set Data = Workbooks.Open(FName)

Data.ActiveSheet.Range("A5").copy
ThisWorkbook.Sheets("Cars").Range("B5").Paste

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Если вам нужно только значение, то вы можете использовать следующее:

ThisWorkbook.Sheets("Cars").Range("B5") = Data.ActiveSheet.Range("A5")
0 голосов
/ 07 мая 2018
ThisWorkbook.Sheets("Cars").Range("B5").Paste

Коллекция Sheets возвращает Object, что означает, что все, что связано с ней, будет вызовом с поздним связыванием, разрешенным во время выполнения. Это также означает, что IntelliSense не может вам здесь помочь, поскольку во время компиляции нет сведений о том, какой именно тип используется.

Объявить переменную объекта Range:

Dim target As Range

Затем назначьте его:

Set target = ThisWorkbook.Worksheets("Cars").Range("B5")

Если лист "Cars" существует во время компиляции, присвойте ему кодовое имя и используйте его вместо разыменования объекта из коллекции Worksheets (используйте Worksheets, когда вы хотите потяните Worksheet; коллекция Sheets содержит много типов листов, не относящихся к листам):

Set target = CarsSheet.Range("B5")

Теперь вы получаете IntelliSense при вводе этой точки:

target.

А потом сделать вызов участника, которого не существует, гораздо сложнее:

intellisense showing no Paste member on a Range object

Тем не менее, , как GSerg уже упоминал , что вы действительно должны здесь сделать, это указать целевой диапазон для метода Copy в качестве параметра.

0 голосов
/ 07 мая 2018

Range не имеет метода Paste. Он имеет только PasteSpecial.
Worksheet имеет Paste, если вы хотите использовать это.

Но на самом деле вы хотите

Data.ActiveSheet.Range("A5").Copy ThisWorkbook.Sheets("Cars").Range("B5")
...