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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 11:14   #1
S0ny
Новичок
Джуниор
 
Регистрация: 19.05.2010
Сообщений: 3
По умолчанию Excel работа с буфером обмена

Возникла проблема с макросом для Excel

Задача следующая:
На рабочем листе выделены несколько строк. Макрос находит выделенные строки и последовательно копирует их в буфер обмена, причем копирует не всю строку, а опеределенные ячейки строки(ячейки могут идти непоследовательно). Затем макрос вставляет скопированные строки в конец листа, причем вставляет в обратной последовательности, т.е. первая скопированная в буфер строка будет вставлена в конец листа последней.

Буду благодарен за любую помощь.

Сам я флешер и никак не связан с VBA, просто человек попросил написать макрос, чтобы автоматизировать некоторые операции с екселем на работе.
Вложения
Тип файла: rar рабочий.rar (9.7 Кб, 15 просмотров)
S0ny вне форума Ответить с цитированием
Старый 19.05.2010, 11:22   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Если вам надо копировать данные с листа на лист, то использовать буфер обмена Windows совсем необязательно.

Из примера непонятно, что и куда должно копироваться.

Код:
Sub test()
    ' будут копироваться ячейки только из этих столбцов
    СтолбцыДляКопирования = "a:d,f:f,h:i,n:m"
    
    Dim ro As Range, ЯчейкаДляВставки As Range
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ' перебираем все строки, в которых выделена хотя бы одна ячейка
    For Each ro In Selection.EntireRow
        ' находим первую незаполненную ячейки снизу листа
        Set ЯчейкаДляВставки = Range("a10000").End(xlDown).Offset(-1)
        ' копируем ячейки, расположенные на пересечении очередной строки,
        ' и диапазона СтолбцыДляКопирования
        ' вставку начинаем с найденной ячейки
        Intersect(ro, Range(СтолбцыДляКопирования)).Copy ЯчейкаДляВставки
    Next ro
End Sub

Последний раз редактировалось EducatedFool; 19.05.2010 в 11:29.
EducatedFool вне форума Ответить с цитированием
Старый 19.05.2010, 11:42   #3
S0ny
Новичок
Джуниор
 
Регистрация: 19.05.2010
Сообщений: 3
По умолчанию Excel работа с буфером обмена

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Если вам надо копировать данные с листа на лист, то использовать буфер обмена Windows совсем необязательно.

Из примера непонятно, что и куда должно копироваться.

Код:
Sub test()
    ' будут копироваться ячейки только из этих столбцов
    СтолбцыДляКопирования = "a:d,f:f,h:i,n:m"
    
    Dim ro As Range, ЯчейкаДляВставки As Range
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ' перебираем все строки, в которых выделена хотя бы одна ячейка
    For Each ro In Selection.EntireRow
        ' находим первую незаполненную ячейки снизу листа
        Set ЯчейкаДляВставки = Range("a10000").End(xlDown).Offset(-1)
        ' копируем ячейки, расположенные на пересечении очередной строки,
        ' и диапазона СтолбцыДляКопирования
        ' вставку начинаем с найденной ячейки
        Intersect(ro, Range(СтолбцыДляКопирования)).Copy ЯчейкаДляВставки
    Next ro
End Sub
Но в моем случае вставка может происходить в другой эксель документ. Т.е. копируем в одном документе, а всталяем в другой. Соответственно будет 2 макроса. Как быть тогда?

Сорри, забыл сразу написать об этом
S0ny вне форума Ответить с цитированием
Старый 19.05.2010, 11:47   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А зачем 2 макроса?

Надо в этом макросе лишь изменить одну строку:
Код:
        Set ЯчейкаДляВставки = Workbooks("Книга2.xls").Worksheets(1).Range("a10000").End(xlDown).Offset(-1)
Тогда макрос будет производить вставку данных на первый лист книги Книга2.xls (эта книга должна быть открыта заранее)
EducatedFool вне форума Ответить с цитированием
Старый 19.05.2010, 12:09   #5
S0ny
Новичок
Джуниор
 
Регистрация: 19.05.2010
Сообщений: 3
По умолчанию Excel работа с буфером обмена

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А зачем 2 макроса?

Надо в этом макросе лишь изменить одну строку:
Код:
        Set ЯчейкаДляВставки = Workbooks("Книга2.xls").Worksheets(1).Range("a10000").End(xlDown).Offset(-1)
Тогда макрос будет производить вставку данных на первый лист книги Книга2.xls (эта книга должна быть открыта заранее)
Спасибо большое)
S0ny вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с буфером обмена Morphling Общие вопросы Delphi 1 25.04.2010 19:46
Работа с буфером обмена Gerzs Общие вопросы Delphi 2 26.03.2010 15:15
Работа с буфером обмена АлексейМк Общие вопросы C/C++ 1 05.08.2009 00:24
Работа с буфером обмена(win) NikLik Общие вопросы Delphi 6 24.06.2008 00:59
работа с буфером данных alexs2141 Общие вопросы C/C++ 5 06.06.2008 12:45