Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как добавить команду остановки макроса по условию?
 
Добры день, есть макрос для синхронизации одного значения с другим, первое значение - задано, это число уникальных значений в списке (С1), второе (D1) - число значений в столбике (A:A) и есть макрос добавляющий значения в список A:A если второе значение меньше первого, еще один макрос очищает список A:A если второе значение случайно оказалось больше первого (хоть это скорее гипотетическая ситуация), но вот как остановить макрос когда значения сравнялись?  
Изменено: CD_Zenit - 10 Ноя 2019 14:09:44
 
End -  остановит ВСЕ макросы. В смысле - прервет работу.
 
К сожалению мне нужно остановить именно данный макрос, а точнее цикл синхронизации и перейти к следующему шагу макроса в который будет входить данный цикл.  
 
Цитата
CD_Zenit написал:
как остановить макрос когда значения сравнялись?  
и
Цитата
CD_Zenit написал:
и перейти к следующему шагу макроса в который будет входить данный цикл
немного отличается.
Если вы знаете условие, то дальше нужно просто понять, что за цикл вы используете, и выqти  через Exit  for /do /….
 
Цикл Do ... Loop,
условие остановки: A = B
Код
Sub Синхро()
    Dim A As Double
    Dim B As Double
    Dim i As Long
    Dim bExit As Boolean
     
    Do
        A = Range("C1").Value
        B = Range("D1").Value
     
        If A > B Then
            For i = B + 1 To A Step 1
                Макрос1
            Next
        ElseIf A < B Then
            For i = A + 1 To B Step 1
                Очистить
            Next
        Else
            bExit = True
        End If
         
        If bExit Then Exit Do
    Loop
End Sub
Изменено: CD_Zenit - 10 Ноя 2019 16:08:24
 
Код
Do 
...
Loop Until A = B
 
К сожалению макрос зависает как и раньше...
 
Код
        A = Range("C1").Value
        B = Range("D1").Value

        If A = B Then Exit Sub

Зачем Do/Loop?
 
Цитата
vikttur написал: Зачем  Do/Loop?
Из того что я понял ранее, именно он задает цикл по условию, пока А не будет равняться B вспомогательный макрос1 срабатывает раз за разом наращивая B

Попробовал так, спотыкается на первом Else
Код
Sub Синхро()
    Dim A As Double
    Dim B As Double
    Dim i As Long
    Dim bExit As Boolean
     
    Do
     
        A = Range("C1").Value
        B = Range("D1").Value
        
        If A = B Then Exit Sub
        Else
            If A > B Then
                For i = B + 1 To A Step 1
                Макрос1
                Next
            ElseIf A < B Then
                For i = A + 1 To B Step 1
                Очистить
                Next
            Else
                bExit = True
            End If
        bExit = True
        End If
         
        If bExit Then Exit Do
    Loop
End Sub
Изменено: CD_Zenit - 10 Ноя 2019 16:57:55
 
Код
Sub Синхро()
    Dim A As Double, B As Double
    Dim i As Long
    Dim bExit As Boolean
      
    A = Range("C1").Value: B = Range("D1").Value

    Select Case True
    Case A = B
        Exit Sub
    Case A > B
        For i = B + 1 To A Step 1
            Макрос1
        Next i
    Case A < B
        ' For i = A + 1 To B Step 1
            Очистить
        ' Next i
    End Select
End Sub


P.S.
Я Вам отвечал на вопрос, написанный в заголовке темы.
Сейчас заглянул в файл... Зачем в цикле чистить диапазон, еcли это делается за один раз? Зачем Do/Loop?

Создайте тему ПО ЗАДАЧЕ. В этой теме ответы даны.
 
СПАСИБО огромное ))) теперь работает!
Пошел разбираться, что за зверь такой: Select Case True )))
 
Цитата
vikttur написал:
Создайте тему ПО ЗАДАЧЕ. В этой теме ответы даны.
К сожалению vba за пределами записей ридера, для меня лишь чуть проще китайской грамоты, 2.08 создавал тему и там мне предложили такой вариант решения, для аналогичного случая, там он работает, а здесь почему то нет, хотя разницы в исходных я не вижу, но видимо она есть...
Еще раз большое спасибо, сейчас попробую Ваш вариант прикрутить к предыдущему случаю, возможно он будет работать быстрее.
 
Цитата
CD_Zenit написал:
Как добавить команду остановки макроса по условию?
Код
If условие Then Stop
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Читают тему (гостей: 1)
Наверх