Как избавиться от выделения диапазона после копирования в Excel

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

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

Ответить
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Программно копирую диапазон ...
Range("B13:L13").Copy
Range("N13").Select
ActiveSheet.Paste

После этого остается выделенным "пунктирной рамкой копирования" диапазон B13:L13
и просто выделенным диапазон, куда копировали.
Как снять эти выделения. При ручном способе достаточно нажать ESC.

Так как правильно сделать, программно посылать ESC или еще как-то?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Избавиться о пунктирной линии можно, если использовать, например :

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

Application.CutCopyMode = False
Хотя в Вашем случае достаточно просто использовать :

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

Range("B13:L13").Copy Destination:=Range("N13")
' Or
Range("B13:L13").Copy Range("N13")
P.S. Если параметры форматирования ячеек копировать не надо, то от применения метода .Copy можно отказаться.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

pashulka,
Ваши варианты копирования диапазонов я взял на вооружение,

Application.CutCopyMode = False - у меня работает только когда его устанавливаешь в конце всех операций,
почему-то при автоматической записи макроса, Excel ставит ее перед командой Copy, и функция не работает.
Sub Макрос1()
' Макрос1 Макрос
' Макрос записан 10.11.2005 (HomePC)

Range("B5:B12").Select
Application.CutCopyMode = False
Selection.Copy
Range("G5").Select
ActiveSheet.Paste
End Sub
А можно ли упростить код для случая копирования только формата диапазона?
Мой исходный вариант:
Range("B13:L23").Copy
Range("N13").Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Устанавливать значение свойства .CutCopyMode действительно необходимо после применения метода .Copy

Что касается копирования форматов ячеек, то могу предложить вот этот вариант :

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

Range("B13:L23").Copy
Range("N13").PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False

' Or

With Application
     .Range("B13:L23").Copy
     .Range("N13").PasteSpecial Paste:=xlFormats
     .CutCopyMode = False
End With
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Спасибо,
устраняется как я понял лишнее действие выделения диапазона,
и лишние операнды в функции PasteSpecial также можно опустить.
Вот какой заботливый редактор записи макросов :)

А снятие обычного выделения с конечного диапазона после завершения копирования я решил простым выделение одной из ячеек, например Range("A1").Select.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

заботливый редактор записи макросов
Он просто повторяет то что делаешь ты - максимально точно ;) Любой клик в ячейки - он отметит select'ом
А уж ты, как программер, лезешь в доки и хелпы и убираешь лишнее ;)
Изображение
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Да нет, претензий к редактору макросов у меня нет, наоборот код узнаешь при его работе.
А "заботливый" употребил в добром и благодарном смысле.
Ответить