Страницы: 1
RSS
Получение диапазона из Selection в отфильтрованной таблице.
 
Здравствуйте, уважаемые форумчане!
Я действительно долго искал ответ на свой вопрос здесь и на других ресурсах, но видимо делал это плохо, так как не нашел ничего даже похожего.
Суть проблемы:
Есть отфильтрованная таблица с данными. Пользователь выбирает произвольный диапазон из этой таблицы(без Ctrl).
Это необходимо для определения строк, которые впоследствии будут обработаны(соответственно, ширина выделения(кол-во столбцов) значения не имеет).
Результат действий пользователя я получаю из аргумента Target события SelectionChange, хотя можно использовать и Selection, так как в этот момент он ссылается на этот же диапазон.
Но, при обращении к этому диапазону, выясняется, что он является непрерывным, т.е. содержит в том числе отфильтрованные строки.
Предварительное использование метода Copy, не меняет ситуацию.
Обращение к свойству Areas также бессмысленно, т.к. он там один.

У меня есть два способа решения проблемы:
1. Сравнивать полученное выделение с исходной таблицей на предмет, скрытых строк.
2. Ставить событие SheetChange, делать вставку, а потом Application.Undo и вот тогда да, событие вызывается столько раз сколько "кусочков" есть в исходном диапазоне.
Однако мне они видятся костылями, особенно второй, а хочется чего-то попроще(понадежней).

Пожалуйста, подскажите, есть ли возможность получить фактически выбранный диапазон?
 
есть
а у вас есть возможность выложить файл-пример?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Да, конечно.
 
выделенные видимые

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Eugene Azarov, здравствуйте
Пример тут не нужен, как мне кажется…
Получить из диапазона только видимые ячейки/области можно так (без обработки исключений):
однако, JayBhagavan, не учёл, что при получении из такого диапазона адреса "напрямую" методом .Address можно получить далеко не все адреса (подробнее - в моей теме)

Учитывая, что вам нужны только строки, я бы сделал 2 цикла - по видимым областям и далее - считая счётчиком строки в каждой области от первой до последней
Изменено: Jack Famous - 13.10.2021 09:35:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
JayBhagavan, Jack Famous,  оба правы и нет, если смотреть №4 как просто демонстрацию работы SpecialCells(xlCellTypeVisible) то ничего страшного нет если не все покажет, и тогда замечание Алексей напрасно. F вот если потом пытаться использовать текстовую строку для использования, то в зависимости от размера таблицы и количества блоков может и правда не хватить отведенных 256.
По вопросам из тем форума, личку не читаю.
 
Огромное спасибо всем ответившим!
Ігор Гончаренко; JayBhagavan; Jack Famous; БМВ;

Ваши советы, рекомендации и замечания очень помогли мне!
Надеюсь, мой вопрос не был банальным и вы также нашли для себя определенные нюансы.
Еще раз спасибо за вашу отзывчивость!
Удачи в творчестве!
Страницы: 1
Наверх