Документация MSDN для Worksheet.Paste
состояний относительно необязательного параметра Destination
:
Объект Range, который указывает, куда следует вставить содержимое буфера обмена. Если этот аргумент опущен, используется текущий выбор.
Поскольку текущий выбор находится на другом листе, релевантна только его адресная часть, согласно разделу примечаний на той же странице:
Если вы не указали аргумент Destination, вы должны выбрать диапазон назначения, прежде чем использовать этот метод.
Этот метод может изменить выбор листа в зависимости от содержимого буфера обмена.
Так что ваш вопрос полностью сводится к тому, как Worksheet.Paste
имеет дело с параметром Destination
когда он опущен, а буфер обмена содержит объект Range
.
Теперь, как говорилось в других ответах, неквалифицированный вызов Range
неявно ссылается на ActiveSheet
, поэтому ваш буфер обмена содержит ActiveSheet.Range("A1")
после копирования:
Range("a1").Copy
Когда вы Paste
, вы определяете место назначения - неявно; место назначения должно быть на том рабочем листе, на который ссылается Worksheets(2)
, потому что это то, что вы называете .Paste
против, и вы не указали параметр Destination.
Учти это:
Sheet1.Range("A1") = "test"
Sheet1.Range("A1").Copy
Sheet3.Paste 'destination is [Sheet3!A1]
Sheet3.Paste Sheet1.Range("A2") 'destination is [Sheet1!A2]
Поэтому, когда Destination
, не имеет значения, с каким листом вы квалифицировали вызов Paste
. Ты спрашиваешь:
Есть ли способ получить или изменить этот "выбор"?
Да: укажите значение для параметра Destination
!