Используя диапазоны, как сделать пасту .COPY DESTINATION как VALUES

У меня есть следующий код, который отлично работает для копирования целых ячеек в новое место назначения.

Dim ws As Worksheet, rng As Range

Set ws = Sheets("Duplicates")
Set rng = ws.Range("A2")

rng.Copy Destination:=Range("A2:A" & Range("G" & Rows.Count).End(xlUp).Row)
  1. Можно ли сделать так, чтобы справился paste special.
  2. Или мне нужно разделить копию / вставить на две строки, используя два объекта диапазона?

РЕДАКТИРОВАТЬ:

Итак, мы пришли к выводу, что вы НЕ МОЖЕТЕ иметь специальную вставку в той же строке, что и копия. Я также обнаружил, что вы все равно можете этого не хотеть.

Если вы скопируете формулу из записи 1 и вставите ее во все записи как VALUES, вы получите значение формулы для первой скопированной записи.

Это не то, что я хотел. Поэтому вам нужно скопировать формулы во все записи в виде формул, затем скопировать эту формулу и вставить как значения.


Dim ws As Worksheet, rng As Range
Set ws = Sheets("Duplicates")

Настройте первый диапазон (одна ячейка с формулой) и скопируйте / вставьте содержимое в нижнюю часть электронной таблицы на основе столбца G:

Set rng = ws.Range("A2")
rng.Copy Destination:=Range("A2:A" & Range("G" & Rows.Count).End(xlUp).Row)

Выберите только что вставленную формулу со второго ряда вниз. Скопируйте их. Затем вставьте содержимое как значения в то же место.

Set rng = ws.Range("A3:A" & Range("G" & Rows.Count).End(xlUp).Row)
rng.Copy
rng.PasteSpecial (xlPasteValues)
Application.CutCopyMode = False 

person aSystemOverload    schedule 10.10.2012    source источник
comment
См. Предыдущий ответ, который я написал здесь: stackoverflow.com/questions/12721781/   -  person mattboy    schedule 10.10.2012
comment
Спасибо @mattboy, но это не совсем ответ на мой вопрос. Я хочу, чтобы одна строка делала специальную вставку. Это возможно?   -  person aSystemOverload    schedule 10.10.2012
comment
Не то, что я знаю из. Если возможно, я хотел бы узнать об этом, надеюсь, у кого-нибудь есть ответ!   -  person mattboy    schedule 10.10.2012
comment
Вариант 1 невозможен. Вот MSDN для метода копирования, который допускает только 1 параметр . Вам нужно использовать вариант 2 как связанный mattboy.   -  person Daniel    schedule 10.10.2012
comment
См. Здесь: stackoverflow.com/questions/10597988/   -  person Alistair Weir    schedule 12.10.2012
comment
@aSystemOverload, если вы нашли ответ на этот вопрос, вы можете создать ответ на свой вопрос и выбрать его.   -  person Mike Kellogg    schedule 18.10.2012


Ответы (1)


В качестве альтернативы вы можете просто назначить значения диапазона без использования копирования и вставки:

Set r1 = Range("D1", "D7")
Set r2 = Range("E1", "E7")

r2.Value = r1.Value ' copies current values from one range to another

после этого присвоения диапазон r2 будет иметь значения, а не формулы, даже если r1 имеет forumlas.

В вашем случае возможно:

rng.Value = rng.Value

(после того, как вы установили для rng правильный размер, как вы отметили)

person Erik Eidt    schedule 20.10.2012