Как сделать цикл с отфильтрованным диапазоном - VBA Excel - PullRequest
0 голосов
/ 14 июня 2019

У меня есть макрос, который зацикливается на выбранном отфильтрованном диапазоне ячеек и выполняет некоторые действия только для выбранных ячеек.

В настоящее время цикл выполняется с помощью кнопки «Далее» с сообщением для запросапользователь, если он хочет продолжить (Да / Нет).Я хотел бы изменить метод цикла с помощью «Сделать пока» с окном сообщений, включающим 3 варианта («Предыдущий», «Следующий», «Выход») вместо 2 («Да», «Нет»).В этом новом цикле я бы использовал счетчик, связанный с положением линии ячейки в фильтруемом диапазоне, и сделал бы что-то вроде:

   Case Previous : Counter = Counter - 1
   Case Next : Counter = Counter + 1
   Case Quit : Exit For

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как легко работать со счетчиком, поскольку мой цикл For Next в настоящее время не имеет счетчика, и в качестве ссылки на позицию ячейки для отфильтрованного диапазона непросто.

Любое предложение о том, как действовать?

Спасибо!

Sub newstuff()
    Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = "Do you want to continue ?"    ' Define message.
    Style = vbYesNo + vbCritical + vbDefaultButton2    ' Define buttons.
    Title = "MsgBox Demonstration"    ' Define title.
    Help = "DEMO.HLP"    ' Define Help file.
    Ctxt = 1000    ' Define topic
        ' context.
        ' Display message.
    Dim addr As String
    addr = Selection.Address 'Select a range of filtered cells in a column

    Dim cl As Range, rng As Range

    Set rng = Range(addr)

    For Each cl In rng.SpecialCells(xlCellTypeVisible)
        Debug.Print cl 'Do some stuff for each cell of the filtered range
    Response = MsgBox(Msg, Style, Title, Help, Ctxt)

        If Response = vbNo Then    ' User chose No.
          Exit For
        End If
    Next cl
End Sub

1 Ответ

0 голосов
/ 14 июня 2019

Я попробую поработать с чем-то вроде (добавление пользовательской формы)

t=2

Do until t > rng.SpecialCells(xlCellTypeVisible).rows.count
Userform1.Show
‘Do something depending on button clicked on userform

t = t + 1

Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...