Selection.PasteSpecial Paste

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

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

Ответить
vladyank
Сообщения: 11
Зарегистрирован: 16 мар 2009, 16:13

Уважаемые знатоки.У меня в макросе такой кусок:

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Это то работает, то нет , ругается на некоректное решение в методе Range
Где собака порылась?

Что означают эти константы? xlNone xlValues
Что означают цифры (буквы) в этих константах? :confused:
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

В каком Range? В приведенной Вами строке нет никакого Range.
Это запись действия меню Правка\Специальная вставка

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

Подробнее см справку VBA по методу PasteSpecial

Ну а также поупражняйтесь со специальной вставкой (Правка\Специальная вставка). Все галочки там - это параметры PasteSpecial
district
Сообщения: 56
Зарегистрирован: 13 ноя 2007, 23:03
Откуда: Москва

Замените selection на конкретный адрес. К примеру:

workbooks("название книги куда вставляете").sheets("название листа куда вставляете").range("адрес ячейки куда").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
--------------------------------------------------------------------------------
Добавленное сообщение
--------------------------------------------------------------------------------
Уважаемые, у меня по ходу этой темы также вопрос возник (чтобы темы не плодить): вставку скопированного значения с применением специальной вставки я описываю аж вот так для того, чтобы скопировать и форматы и значения и ширину столбцов:

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

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

Нельзя ли это же сделать без Paste, то есть через ".copy destination:=" к примеру? В общем как-то укоротить код.
vladyank
Сообщения: 11
Зарегистрирован: 16 мар 2009, 16:13

не могу это сделать из-за того что пробовал указывать конкретный адрес и от этого ничего не менялось, а во вторых - это циклическая операция.... здесь что-то счязанно с запароливанием, я сначала снимаю пароль, провожу манипуляции, а портом обратно ставлю пароль на лист
Аватара пользователя
mc-black
Сообщения: 250
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

Возможно, защита листа запрещает выделение некоторых ячеек. Вы уверены, что во время работы макроса защита листа снята?
На заказ: VBA, Excel mc-black@yandex.ru
district
Сообщения: 56
Зарегистрирован: 13 ноя 2007, 23:03
Откуда: Москва

Если проблема и не в защите, то нужно прочесать код debug'ом: поставь в самом начале процедуры метку (я использую stop, но можно и просто маркером отметить) и запусти процедуру заново (лучше файл переоткрыть на всякий заново). Как только алгоритм дойдет до проблемной процедуры будет возможность пошагово посмотреть чего же происходит на экране (раз уж используется selection, то все шаги алгоритма будут видны - есть свои плюсы в применении и этого объекта). Может по ходу и поймешь где затык. Не поймешь - ставь stop в начале процедуры, которая предшествует процедуре с ошибкой. И так даее. Только пароль, понятно, с vba сними, если код защищен от просмотра.

И еще предположение наобум из простых и распространенных - часто забывая об отключенных ошибках (всевозможных On error resume next и прочее) я натыкаюсь на ошибку где-то уже в конце алгоритма, хотя неверный код проскочил где-то в начале. Но это обнаруживаю уже потом после долгих мучений и поисков проблемы. Если используются подобные отключатели, то лучше на время проверки их деактивировать.
vladyank
Сообщения: 11
Зарегистрирован: 16 мар 2009, 16:13

большое спасибо, проблема оказалась в защите :D




QUOTE=district;67125]Если проблема и не в защите, то нужно прочесать код debug'ом: поставь в самом начале процедуры метку (я использую stop, но можно и просто маркером отметить) и запусти процедуру заново (лучше файл переоткрыть на всякий заново). Как только алгоритм дойдет до проблемной процедуры будет возможность пошагово посмотреть чего же происходит на экране (раз уж используется selection, то все шаги алгоритма будут видны - есть свои плюсы в применении и этого объекта). Может по ходу и поймешь где затык. Не поймешь - ставь stop в начале процедуры, которая предшествует процедуре с ошибкой. И так даее. Только пароль, понятно, с vba сними, если код защищен от просмотра.

И еще предположение наобум из простых и распространенных - часто забывая об отключенных ошибках (всевозможных On error resume next и прочее) я натыкаюсь на ошибку где-то уже в конце алгоритма, хотя неверный код проскочил где-то в начале. Но это обнаруживаю уже потом после долгих мучений и поисков проблемы. Если используются подобные отключатели, то лучше на время проверки их деактивировать.[/QUOTE]
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Спасибо, в защите была проблема :)


mc-black писал(а):Возможно, защита листа запрещает выделение некоторых ячеек. Вы уверены, что во время работы макроса защита листа снята?
Ответить