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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
district
Сообщения: 56
Зарегистрирован: 13 ноя 2007, 23:03
Откуда: Москва

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

.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, то буфер после этих операций чистить не надо. Правильно понимаю?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

&quot писал(а):Нельзя ли это же сделать без Paste, то есть через ".copy destination:=" к примеру?
Только если сделать .copy, а потом еще и ширину столбца присвоить следом. Т.е. в 2 команды.
district
Сообщения: 56
Зарегистрирован: 13 ноя 2007, 23:03
Откуда: Москва

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

И во втором вопросе-примере буфер используется или нет? Надо ставить команду чистки буфера после применения такого кода?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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

  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
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Naeel Maqsudov, в общем случае при переносе по .copy строк 3 - так как нужно помимо ширины столбцов устанавливать ещё и высоту строк RowHeight.
Андрей Энтелис,
aentelis.livejournal.com
district
Сообщения: 56
Зарегистрирован: 13 ноя 2007, 23:03
Откуда: Москва

Сорри, не разобрался: помимо переноса ширины еще добавлять нужно перенос высоты строки? Разве excel при отсутствии указаний не будет использовать здесь высоту по умолчанию?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Именно что что
будет использовать высоту по умолчанию
.
Т.е если в источнике была другая при простом копировании, скажем на другой лист, исходная высота строк пропадёт. Поэтому либо SpecialPaste, либо установка
ширины и высоты.
Андрей Энтелис,
aentelis.livejournal.com
Ответить