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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2009, 18:17   #1
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию Как получить в VBA номера строк выделенного диапазона?

Всем добрый день! Ситуация: пользователь выделил диапазон ячеек (например R5C1:R15C1 или R10C2:R20C5) Буду оч благодарен за подсказку, какая конструкция в VBA может определить номер самой верхней и самой нижней строки выделенного диапазона? (т.е. нужно получить 5 и 15 (10 и 20) для первого (второго) случая.
Chelentano вне форума Ответить с цитированием
Старый 29.07.2009, 18:22   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Код:
lRow = Selection.Row'первая строка
lLastrowInSelectedRange = Selection.Row + Selection.Rows.Count - 1'последняя строка
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 29.07.2009, 19:20   #3
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию

Prist, thanx so much!

Хотел ещё уточнить такой вопрос: а как передать полученные номера строк в метод Rows().Delete? Я сделал такое:

Rows("Selection.Row : Selection.Row + Selection.Rows.Count -1").Delete shift:=xlUp

и у меня выдается сообщение что Type Mismatch. Спасибо большое заранее!
Chelentano вне форума Ответить с цитированием
Старый 29.07.2009, 21:20   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Надо либо так
Код:
Rows(Selection.Row&":"&Selection.Row + Selection.Rows.Count -1).Delete shift:=xlUp
либо так
Код:
Range(cells(Selection.Row,1),cells(Selection.Row + Selection.Rows.Count -1,1)).EntireRow.Delete
либо так
Код:
Range("A"&Selection.Row&":A"&Selection.Row + Selection.Rows.Count -1,1)).EntireRow.Delete
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 29.07.2009, 22:11   #5
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию

Prist, спасибо огромное снова! :-) Но почему-то сработал только второй вариант, там где нет сцеплений подстрок. В первом варианте VBA ругнулся на ":"

Rows(Selection.Row&":"&Selection.Row + Selection.Rows.Count -1).Delete shift:=xlUp

А в третьем - на ":A":

Range("A"&Selection.Row&":A"&Selection.Row + Selection.Rows.Count -1,1)).EntireRow.Delete
Chelentano вне форума Ответить с цитированием
Старый 30.07.2009, 04:54   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Надо либо так

либо так

либо так
Зачем усложнять?
Если человек хочет удалить строки, в которых выделены ячейки, то проще всего так:
Selection.EntireRow.Delete
EducatedFool вне форума Ответить с цитированием
Старый 30.07.2009, 04:54   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Потому, что в первом и третьем вариантах знак "&" должен быть отделен пробелами.
А вообще-то, почему Вас не устраивает удаление строк выделенного диапазона сразу, без определения первой и последней строк? Например, так:
Код:
Selection.EntireRow.Delete
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 30.07.2009, 09:26   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

сорри за флуд...

Цитата:
Сегодня, 04:54
EducatedFool
SAS888
одновременно! БРАВО!!!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.07.2009, 10:23   #9
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
А вообще-то, почему Вас не устраивает удаление строк выделенного диапазона сразу, без определения первой и последней строк? Например, так:
Код:
Selection.EntireRow.Delete
Ой, спасибо большое! Извиняюсь за изначально не полностью поставленный вопрос и я также будучи новичком не знал, что все строки, покрываемые выделенным диапазоном можно удалить через Selection.EntireRow

Последний раз редактировалось Chelentano; 30.07.2009 в 10:26.
Chelentano вне форума Ответить с цитированием
Старый 04.11.2010, 14:19   #10
Roma_oryol
Новичок
Джуниор
 
Аватар для Roma_oryol
 
Регистрация: 04.11.2010
Сообщений: 1
По умолчанию

Здраствуйте всем!
Я заранее извиняюсь, может быть это не по этой теме.

Хочю скрыть строки, написал вот это:

n = 6
n1 = 200
list.Rows(n & " , " & n1).Hidden = True

.....не работает, скрывает только первую строку
Давайте будем реалистичными, и совершим невозможное (Эрнесто Че Гевара)

Последний раз редактировалось Roma_oryol; 04.11.2010 в 14:35.
Roma_oryol вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить измененные ячейки в VBA? motorway Microsoft Office Excel 10 15.07.2009 15:46
Определение номера последней строки выделенного диапазона НеВа6464 Microsoft Office Excel 2 17.05.2009 14:36
VBA= сравнить 2 диапазона. Jainy_90 Microsoft Office Excel 2 16.05.2009 22:07
Номера строк для блокнота __@cmd@__ Общие вопросы Delphi 5 01.02.2009 16:36
Как средствами VBA получить доменное имя пользователя? Прохожий Microsoft Office Excel 3 04.10.2008 18:28