Как сделать цикл по фильтру? Т.е. чтобы курсор бежал только по тем записям, которые отображаются на экране...
Цикл по фильтру
20.10.2012 23:34:28
|
|
|
|
20.10.2012 23:38:48
А рядом тема "Как исключить из области видимости цикла скрытые строки" не об этом?
|
|
|
|
21.10.2012 14:14:59
ну так и перебирайте строки :)
for each r in cRange.rows r.cells(1).activate application.speech.speak r.cells(1).value next примечание: cells(1) здесь - ячейки первого столбца выделенного диапазона. если нужны, к примеру, ячейки из 4-го столбца, поменяйте 1 на 4.
фрилансер Excel, VBA - контакты в
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг |
|
|
|
21.10.2012 16:11:42
честно говоря... только никому, да?... для меня самого такой вариант - открытие :)
вообще говоря, диапазон видимых ячеек после применения фильтра в общем случае представляет собой несмежный диапазон (конечно, могут быть и исключения - это уж как фишка ляжет) и, "по-хорошему", надо в цикле перебирать все области такого диапазона, а внутри каждой области - все строки этой области for each a in cRange.Areas for each r in a.rows ... next next но, оказывается конструкции типа for each c in cRange.cells или for each r in cRange.rows обеспечивают "сквозной" доступ ко всем ячейкам (строкам) даже несвязного диапазона. а вот ваше cRange.Rows.Count даёт кол-во строк только для первой из областей.
фрилансер Excel, VBA - контакты в
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг |
|
|
|
21.10.2012 22:05:34
Так не получится. По какому-то же признаку Вы выделяете нужную строку? Вот и проверяйте наличие этого признака в цикле.
Я сам - дурнее всякого примера! ...
|
|
|
|
21.10.2012 22:27:16
пара вариантов
1) перед определением диапазона запомнить номер строки текущей ячейки, а затем в цикле пропускать строки с меньшими номерами n&=activecell.row set cRange=ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible) for each r in cRange.rows if r.row>=n then r.cells(1).activate application.speech.speak r.cells(1).value end if next 2) таки задать правильный диапазон n&=activecell.row set cRange=intersect(ActiveCell.CurrentRegion, activesheet.rows(n & ":" & rows.count)).SpecialCells(xlCellTypeVisible) дальше - старый цикл
фрилансер Excel, VBA - контакты в
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг |
|
|
|
21.10.2012 22:49:04
я тоже не знал.
так что передаю это спасибо Алмейде.
фрилансер Excel, VBA - контакты в
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг |
|
|
|
21.10.2012 23:48:20
Да ладно вам... это мелочи! Но все-равно мерси, особенно за ответную помощь! ) Главное поставьте хороший голосовой движок, например Loquando Olga TTS и выберите его в панели управления - будет вообще супер ;)
А вообще я делаю обновление к раздаче (может, кому-то тоже будет интересно))): Осталось уже совсем чуть-чуть. Надеюсь с вашей помощью доделать все по-человечески! )))) ikki, спасибо большое. Но теперь придется уже завтра потестировать, а то сейчас уже поздно...) |
|
|
|
04.11.2012 09:41:02
а кстати, что знак "&" делает в выражении "n&=activecell.row"?
|
|
|
|
04.11.2012 09:57:00
две недели тестировали? :)
тип переменной он конкретизирует (long) конечно, в случае, если она не объявлена ранее.
фрилансер Excel, VBA - контакты в
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг |
|
|
|
Читают тему