![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.11.2009
Сообщений: 13
|
![]()
Товарищи, прошу совета как снять выделение группы строк после выполнения
Range(...).Select Selection.Copy Задача: нужен макрос (для Excel 2003), вызываемой одной кнопкой, который из первой таблицы ("СПИСОК") копирует строки со второй по последнюю, и вставляет их в конец второй таблицы ("БАЗА") + 1 пустая строка (разделитель), затем выделение копированных строк снимается и активной ячейкой становиться первая в последней строке таблицы "СПИСОК". --------------- начало кода --------------- Код:
Все это вроде бы работает, но никак не могу программно снять выделение строк, как в исходной таблице "СПИСОК", так и в таблице "БАЗА". Что я написал неправильно? И еще хочу уточнить, как правильнее сделать таблицу (например, "СПИСОК") текущей, Sheets("СПИСОК").Select или Sheets("СПИСОК").Activate Большое спасибо за ответ! Последний раз редактировалось Smaragdov; 21.08.2010 в 20:08. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Ну можно, например, сделать активной какую-нибудь ячейку другую
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 30.11.2009
Сообщений: 13
|
![]() |
![]() |
![]() |
![]() |
#4 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
1. Снять выделение (которое после копирования) можно строкой кода
application.CutCopyMode= false 2. В вашем случае (да и вообще почти в любом коде) использование методов Select и Activate не требуется, и только усложняет код, увеличивая время выполнения макроса. Проще и быстрее будет так: Код:
Цитата:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 21.08.2010 в 22:49. |
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Я бы UsedRange не доверял. Разве если там никто руками не работал, и таблица только растёт... См. пример.
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]() Цитата:
![]() Вот здесь всем примерам пример В файле 40 записей.Файл размером 10 метров.Фильтр умудрились поставить на диапазон А1:B1048412
Анализ,обработка данных Недорого
|
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 30.11.2009
Сообщений: 13
|
![]()
Большое спасибо, EducatedFool !
application.CutCopyMode = false – мне действительно помогло! Ваша процедура копирования действительно проще и работает лучше, не мигает экран при ее выполнении. Заметил один интересный момент – в исходной таблице "СПИСОК" на строках были несколько кнопочек, созданных для экспериментов с макросами. В Вашем примере они также скопировались в таблицу "БАЗА", а в случае предварительного выделения диапазона и копирования – они не копируются. Это не слишком принципиально, т.к. в окончательном варианте этих кнопочек не должно быть. Скажите, а можно ли сделать так, чтобы копировались ТОЛЬКО строки с вбитыми значениями (не пустые)? Уважаемый Hugo121, если Вы полагаете, что не стоит использовать UsedRange, то каким же образом лучше всего определить количество строк, использованных таблице? |
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]() Цитата:
iLastrow = Range("b" & Rows.Count).End(xlUp).Row Это если ниже в столбце B даннх нет. Для таблицы, которая снизу отделена пробелом: LastRow = [b9].CurrentRegion.Row + [b9].CurrentRegion.Rows.Count - 1 B9 принадлежит этой таблице. Это если ниже ещё есть данные.
webmoney: E265281470651 Z422237915069 R418926282008
|
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 30.11.2009
Сообщений: 13
|
![]()
Hugo121, спасибо!
Первый пример проверил - работает! Не понял, почему во втором примере выбрана именно ячейка B9... |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Потому что я проверял на данных B9:D13 (там ещё A13 что-то стукнулось, но не суть...). Т.е. берёшь любую точно известную ячейку - например в шапке таблицы - и получаешь её последний ряд. Но ниже должен быть пробел, и даже вернее вокруг должен быть пустой ряд.
Да что там - см.пример. Поиграйтесь с единицами.
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
копирование таблицы из одной базы в другую | chib_sv | SQL, базы данных | 7 | 20.08.2010 07:46 |
Копирование и вставка формул из одной книги в другую | KNatalia | Microsoft Office Excel | 5 | 10.06.2010 13:15 |
Копирование записей из одной таблицы в другую | rockedit | БД в Delphi | 4 | 10.12.2009 21:39 |
Копирование поля из одной таблицы в другую(ADO) | RamireZ | БД в Delphi | 5 | 17.11.2009 22:48 |
Копирование данных из одной таблицы в другую! | фЁдОр | БД в Delphi | 18 | 06.01.2008 19:27 |