Страница 1 из 1

альтернатива SpecialPaste

Добавлено: 19 апр 2009, 01:10
district
Уважаемые, вставку скопированного формата и ширину столбца с применением специальной вставки я описываю аж вот так для того, чтобы скопировать и форматы и значения и ширину столбцов:

.Range(irange).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range(irange).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

, где irange, понятно, переменная содержащая конкретное указание на адрес куда вставляю данные.

Нельзя ли это же сделать без Paste, то есть через ".copy destination:=" к примеру? В общем как-то избавиться от обращения к буферу и от Paste. Не то чтобы очень нужно, но раздражает что помимо доп. строк с этим пасте надо еще помнить, что буфер надо почистить.

И второй вопрос сразу: если копирование прописываешь как к примеру workbook1.sheet1.range1 = workbook2.sheet2.range2, то буфер после этих операций чистить не надо. Правильно понимаю?

Re: альтернатива SpecialPaste

Добавлено: 20 апр 2009, 09:17
Naeel Maqsudov
&quot писал(а):Нельзя ли это же сделать без Paste, то есть через ".copy destination:=" к примеру?
Только если сделать .copy, а потом еще и ширину столбца присвоить следом. Т.е. в 2 команды.

Re: альтернатива SpecialPaste

Добавлено: 20 апр 2009, 09:32
district
Сорри, а поподробнее можно :) ? Я сейчас в исходном примере делаю .copy (оставил за рамками за очевидностью) и затем два paste: форматов и ширины столбцов. Затем чищу буфер. Итого четыре команды. Как это делается двумя командами? И .copy - это по-любому использование буфера. Правильно?

И во втором вопросе-примере буфер используется или нет? Надо ставить команду чистки буфера после применения такого кода?

Re: альтернатива SpecialPaste

Добавлено: 21 апр 2009, 09:24
Naeel Maqsudov

Код: Выделить всё

  Range("A:A").Copy Range("E1")  'копируем данные с форматом
  Range("E1").ColumnWidth = Range("A:A").ColumnWidth 'копируем ширину столбца
Буфер при этом не используется.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Для нескольких столбцов это тоже пожходит!

Код: Выделить всё

  Range("A:B").Copy Range("E1")
  Range("E1:F1").ColumnWidth = Range("A:B").ColumnWidth

Re: альтернатива SpecialPaste

Добавлено: 21 апр 2009, 13:30
Aent
Naeel Maqsudov, в общем случае при переносе по .copy строк 3 - так как нужно помимо ширины столбцов устанавливать ещё и высоту строк RowHeight.

Re: альтернатива SpecialPaste

Добавлено: 22 апр 2009, 19:02
district
Сорри, не разобрался: помимо переноса ширины еще добавлять нужно перенос высоты строки? Разве excel при отсутствии указаний не будет использовать здесь высоту по умолчанию?

Re: альтернатива SpecialPaste

Добавлено: 22 апр 2009, 19:53
Aent
Именно что что
будет использовать высоту по умолчанию
.
Т.е если в источнике была другая при простом копировании, скажем на другой лист, исходная высота строк пропадёт. Поэтому либо SpecialPaste, либо установка
ширины и высоты.