Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обработка только видимых строк в цикле - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка только видимых строк в цикле (Функции Function)
Обработка только видимых строк в цикле
HEnogapok Дата: Четверг, 16.01.2014, 17:05 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Дорого всем времени суток!
Имеется вот такой вот фрагмент кода (функция):
[vba]
Код
Private Function GetAddresses() As Address()
     Dim addrs(3) As Address
     Dim i As Integer
     Dim firstCell As Range
     Set firstCell = Application.ActiveSheet.Range("A4")
     For i = 0 To 3
         With firstCell
             addrs(i).Street = .Offset(i, 0).Value
             addrs(i).Building = .Offset(i, 1).Value
             addrs(i).Comments = .Offset(i, 2).Value
         End With
     Next i
     GetAddresses = addrs
End Function
[/vba]
в ней, как видите, есть цикл, обрабатывающий значения в конкретных ячейках. Количество ячеек задано явно - "3".
Задача: необходимо сделать так, чтобы количество ячеек менялось динамически (все не пустые в данном диапазоне/столбце), НО ещё и таким образом, чтобы при выборе значений фильтром на листе, обрабатывались бы только видимые (отфильтрованные)ячейки.
Есть специалисты могущие помочь в данном деле, или это не решаемая задача???
 
Ответить
СообщениеДорого всем времени суток!
Имеется вот такой вот фрагмент кода (функция):
[vba]
Код
Private Function GetAddresses() As Address()
     Dim addrs(3) As Address
     Dim i As Integer
     Dim firstCell As Range
     Set firstCell = Application.ActiveSheet.Range("A4")
     For i = 0 To 3
         With firstCell
             addrs(i).Street = .Offset(i, 0).Value
             addrs(i).Building = .Offset(i, 1).Value
             addrs(i).Comments = .Offset(i, 2).Value
         End With
     Next i
     GetAddresses = addrs
End Function
[/vba]
в ней, как видите, есть цикл, обрабатывающий значения в конкретных ячейках. Количество ячеек задано явно - "3".
Задача: необходимо сделать так, чтобы количество ячеек менялось динамически (все не пустые в данном диапазоне/столбце), НО ещё и таким образом, чтобы при выборе значений фильтром на листе, обрабатывались бы только видимые (отфильтрованные)ячейки.
Есть специалисты могущие помочь в данном деле, или это не решаемая задача???

Автор - HEnogapok
Дата добавления - 16.01.2014 в 17:05
doober Дата: Четверг, 16.01.2014, 18:14 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Попробуйте так
[vba]
Код
Private Function GetAddresses() As Address()
     Dim addrs() As Address, paralast As Integer
     Dim Y As Range, firstCell As Range
     ReDim addrs(0)
     paralast = -1
     With ActiveSheet
         Set Y = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
     End With
     For Each firstCell In Y.Cells.SpecialCells(xlCellTypeVisible)
         With firstCell
             paralast = paralast + 1
             ReDim Preserve addrs(paralast)
             addrs(paralast).Street = .Offset(i, 0).Value
             addrs(paralast).Building = .Offset(i, 1).Value
             addrs(paralast).Comments = .Offset(i, 2).Value
         End With

     Next
     GetAddresses = addrs
End Function
[/vba]


 
Ответить
СообщениеПопробуйте так
[vba]
Код
Private Function GetAddresses() As Address()
     Dim addrs() As Address, paralast As Integer
     Dim Y As Range, firstCell As Range
     ReDim addrs(0)
     paralast = -1
     With ActiveSheet
         Set Y = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
     End With
     For Each firstCell In Y.Cells.SpecialCells(xlCellTypeVisible)
         With firstCell
             paralast = paralast + 1
             ReDim Preserve addrs(paralast)
             addrs(paralast).Street = .Offset(i, 0).Value
             addrs(paralast).Building = .Offset(i, 1).Value
             addrs(paralast).Comments = .Offset(i, 2).Value
         End With

     Next
     GetAddresses = addrs
End Function
[/vba]

Автор - doober
Дата добавления - 16.01.2014 в 18:14
HEnogapok Дата: Четверг, 16.01.2014, 21:49 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
doober, Спасибо огромное, но... не работает((((
немного подправил Ваш код исходя из логики тут:
[vba]
Код
           addrs(paralast).Street = .Offset(paralast, 0).Value
              addrs(paralast).Building = .Offset(paralast, 1).Value
              addrs(paralast).Comments = .Offset(paralast, 2).Value
[/vba]
но.... ой, увы, мне, увы((((
ставил для проверки
[vba]
Код
MsgBox paralast
[/vba] - счетчик тикает.
ещё, регулярно выскакивает сообщение "User-defined type not defined"
Что можно ещё предпринять???
 
Ответить
Сообщениеdoober, Спасибо огромное, но... не работает((((
немного подправил Ваш код исходя из логики тут:
[vba]
Код
           addrs(paralast).Street = .Offset(paralast, 0).Value
              addrs(paralast).Building = .Offset(paralast, 1).Value
              addrs(paralast).Comments = .Offset(paralast, 2).Value
[/vba]
но.... ой, увы, мне, увы((((
ставил для проверки
[vba]
Код
MsgBox paralast
[/vba] - счетчик тикает.
ещё, регулярно выскакивает сообщение "User-defined type not defined"
Что можно ещё предпринять???

Автор - HEnogapok
Дата добавления - 16.01.2014 в 21:49
HEnogapok Дата: Четверг, 16.01.2014, 21:59 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
в догонку...
Странно, но проверял
[vba]
Код
MsgBox "Адреса" & addrs(paralast).Street & addrs(paralast).Building
[/vba]
и получается, что адреса читаются ровно через строчку!!!! хотя счетчик работает справно от 0 и до куда положено
 
Ответить
Сообщениев догонку...
Странно, но проверял
[vba]
Код
MsgBox "Адреса" & addrs(paralast).Street & addrs(paralast).Building
[/vba]
и получается, что адреса читаются ровно через строчку!!!! хотя счетчик работает справно от 0 и до куда положено

Автор - HEnogapok
Дата добавления - 16.01.2014 в 21:59
doober Дата: Четверг, 16.01.2014, 22:19 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Понял в чем дело,проверить не мог,типа нету, тупо скопировал ваш код
[vba]
Код
        addrs(paralast).Street = .Offset(i, 0).Value
             addrs(paralast).Building = .Offset(i, 1).Value
             addrs(paralast).Comments = .Offset(, 2).Value
[/vba]

Замените на
[vba]
Код
        addrs(paralast).Street = .Value
             addrs(paralast).Building = .Offset(0, 1).Value
             addrs(paralast).Comments = .Offset(0, 2).Value
[/vba]


 
Ответить
СообщениеПонял в чем дело,проверить не мог,типа нету, тупо скопировал ваш код
[vba]
Код
        addrs(paralast).Street = .Offset(i, 0).Value
             addrs(paralast).Building = .Offset(i, 1).Value
             addrs(paralast).Comments = .Offset(, 2).Value
[/vba]

Замените на
[vba]
Код
        addrs(paralast).Street = .Value
             addrs(paralast).Building = .Offset(0, 1).Value
             addrs(paralast).Comments = .Offset(0, 2).Value
[/vba]

Автор - doober
Дата добавления - 16.01.2014 в 22:19
HEnogapok Дата: Пятница, 17.01.2014, 07:55 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
doober, Спасибо!!!! Всё заработало!!!!
 
Ответить
Сообщениеdoober, Спасибо!!!! Всё заработало!!!!

Автор - HEnogapok
Дата добавления - 17.01.2014 в 07:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка только видимых строк в цикле (Функции Function)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!