Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 17:38   #1
esmo
Новичок
Джуниор
 
Регистрация: 20.07.2010
Сообщений: 1
Сообщение selection, paste и изменение свойств interior - вопрос

Здравствуйте. Excel+VBA, вот с чем столкнулся:
1. открываю текстовый файл с разделителями
Код:
Workbooks.OpenText filename:=sTextFilename, ConsecutiveDelimiter:=True, Space:=True
и т.д.
2. выделяю и копирую оттуда диапазон
Код:
Range("C2", Range("M2").End(xlDown)).Select
Selection.Copy
3. перевожу фокус в окно рабочей книги и вставляю диапазон подряд в цикле в несколько ячеек:
Код:
For Each cell In Range("A2:L2").Cells
 cell.Select
 ActiveSheet.Paste
 Next
Так вот: если я после вставки пытаюсь изменить фон
Код:
Selection.Interior.ColorIndex = vbGreen
выдается ошибка, что Метод Paste из класса Worksheet завершен неверно.
Проверил такую операцию с помощью макрорекордера - и правда буфер опустошается после изменения свойств выделения. Как бы обойти?
esmo вне форума Ответить с цитированием
Старый 29.07.2010, 21:05   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вообще, при копировании можно (и даже нужно) обойтись без использования объекта Selection.

Я бы привёл пример кода, но не совсем понял, что должно получиться в результате.
Судя по коду, вы копируете некий диапазон ячеек, и несколько раз подряд вставляете его на лист - каждый раз начиная вставку на одну ячейку правее.
Таким образом, в результате вставки получается диапазон, в котором первый столбец повторяется много раз, а все остальные столбцы остаются в единственном экземпляре.
Я правильно понял суть макроса?
Покажите пример того, что должно получится в результате копирования, и пример импортируемого файла sTextFilename - тогда получите более простой вариант кода.
EducatedFool вне форума Ответить с цитированием
Старый 30.07.2010, 07:04   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Скопированный диапазон можно вставлять несколько раз подряд. Но если между операциями вставки выполнить какую-либо процедуру (например, Selection.Interior.ColorIndex = vbGreen), то дальнейшая вставка будет невозможна, т.к. Excel выйдет из режима CutCopyMode. Т.е. исходный диапазон потребуется копировать вновь.
Есть два пути: либо сначала вставлять, затем окрашивать ячейки, либо в цикле копировать - вставлять - окрашивать.
EducatedFool абсолютно прав. Приведите пример того, что Вы хотите получить. Требуемый код будет более рациональный.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Selection.Paste agregator Microsoft Office Excel 2 17.11.2009 06:06
Изменение свойств кнопки через WinAPI Никки Win Api 12 20.09.2009 15:01
массовое изменение свойств компонентов CraZZy RabbIt Компоненты Delphi 1 15.03.2009 23:13
Изменение свойств файла dimonbest Win Api 7 23.02.2009 20:42
Изменение свойств компонентов jocry Общие вопросы Delphi 9 10.02.2009 10:27