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

Selection.PasteSpecial Paste

Добавлено: 09 апр 2009, 16:56
vladyank
Уважаемые знатоки.У меня в макросе такой кусок:

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

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

Что означают эти константы? xlNone xlValues
Что означают цифры (буквы) в этих константах? :confused:

Re: Selection.PasteSpecial Paste

Добавлено: 09 апр 2009, 21:19
Naeel Maqsudov
В каком Range? В приведенной Вами строке нет никакого Range.
Это запись действия меню Правка\Специальная вставка

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

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

Ну а также поупражняйтесь со специальной вставкой (Правка\Специальная вставка). Все галочки там - это параметры PasteSpecial

Re: Selection.PasteSpecial Paste

Добавлено: 11 апр 2009, 10:10
district
Замените 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:=" к примеру? В общем как-то укоротить код.

Re: Selection.PasteSpecial Paste

Добавлено: 13 апр 2009, 12:55
vladyank
не могу это сделать из-за того что пробовал указывать конкретный адрес и от этого ничего не менялось, а во вторых - это циклическая операция.... здесь что-то счязанно с запароливанием, я сначала снимаю пароль, провожу манипуляции, а портом обратно ставлю пароль на лист

Re: Selection.PasteSpecial Paste

Добавлено: 13 апр 2009, 13:35
mc-black
Возможно, защита листа запрещает выделение некоторых ячеек. Вы уверены, что во время работы макроса защита листа снята?

Re: Selection.PasteSpecial Paste

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

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

Re: Selection.PasteSpecial Paste

Добавлено: 15 апр 2009, 17:26
vladyank
большое спасибо, проблема оказалась в защите :D




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

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


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