Страницы: 1
RSS
Просмотреть checkbox по условиям
 
Добрый день. Как написать цикл по checkbox в userform, чтобы он работал не для каждого(for each), а проходил каждый checkbox по очереди и выполнял действия с каждым по очереди? Мне нужно перебрать каждый чекбокс и вставить значения в ячейки из текстбокс1 и текстбокс2. Т.к. для каждого текстбокс несколько чекбоксов, то нужно для каждого чекбокса отдельная строка, куда вставлять данные.
Мой код ниже:
Код
Dim x
Dim lr As Long
lr = .Cells(1, 1).End(xlUp).Row + 1
  For each x in Me.Controls    'эту строку нужно изменить, чтобы цикл ходил по чекбоксам по очереди
    If TypeOf x Is MSForms.CheckBox Then
      If x = True Then
        .Cells(lr, 1).Value = frmKust1.Value
        .Cells(lr, 3) = rcNow1.Value
        .Cells(lr, 4).Value = rcTo1.Value
          If x = FlowSwitcherForm.cat_sh_1 Then Cells(lr, 2) = "S"
          If x = FlowSwitcherForm.cat_fr_1 Then Cells(lr, 2) = "F"
          If x = FlowSwitcherForm.cat_alc_1 = True Then Cells(lr, 2) = "A"
          If x = FlowSwitcherForm.cat_of_1 = True Then Cells(lr, 2) = "FV"
          If x = FlowSwitcherForm.cat_z_1 = True Then Cells(lr, 2) = "Fr"
          lr = lr + 1
      End If
    End If
  Next
Изменено: Hellmaster - 10.09.2019 18:10:44
 
Форму с этими чудесами показать не хотите? Чтобы код был не просто в воздухе...
 
Цитата
Hellmaster написал:
For each x in Me.Controls    'эту строку нужно изменить, чтобы цикл ходил по чекбоксам по очереди
уже интересно, а тут оно скажет рандомно?
По вопросам из тем форума, личку не читаю.
 
БМВ, у меня всего 5 чекбоксов. Для каждого чекбокск нужна отдельная строка. Если заполнено больше 1 чекбокса, то он проходит по ним 5 раз и добавляет 5 строк, вписывая в столбце со значением чекбокса последний заполненный. Завтра сделаю файл пример
 
Так?
Код
Dim x As Control, lr&, iStr$
lr = .Cells(1, 1).End(xlUp).Row + 1
For Each x In Me.Controls
    If TypeOf x Is MSForms.CheckBox Then
        If x = True Then
            .Cells(lr, 1).Value = frmKust1.Value
            .Cells(lr, 3) = rcNow1.Value
            .Cells(lr, 4).Value = rcTo1.Value
            'вместо 'Первый Второй и т.п.' впишите ИМЕНА своих чекбоксов
            Select Case x.Name
                Case "Первый": iStr = "S"
                Case "Второй": iStr = "F"
                Case "Третий": iStr = "A"
                Case "Четвертый": iStr = "FV"
                Case "Пятый": iStr = "Fr"
            End Select
            Cells(lr, 2) = iStr
            lr = lr + 1
        End If
    End If
Next
Согласие есть продукт при полном непротивлении сторон.
 
Цитата
Hellmaster написал:
не For each
А чем такой цикл не устраивает?
 
Юр, так вопрос вообще не "Цикл по checkbox не For each", а "Как правильно использовать оператор "If".
 
RAN, а что с ифом не так?
Юрий М, мне нужно, чтобы макрос проделывал нижнюю часть кода со вставкой в ячейки по каждому чекбоксу отдельно, т.е. выбрал непустой чекбокс, сделал кол, перешёл к следующему. В цикле for each он проверяет каждый цикл все чекбоксы и вставляет последний заполненный.
Sanja,  Сейчас нет доступа к файлу, чтобы проверить, завтра отпишусь.
 
Цитата
Hellmaster написал:
В цикле for each он проверяет каждый цикл
Каждый цикл? Вы о чём? )
For Each отлично справится с задачей перебора контролов.
 
Юрий М, я имел в виду, что каждый прогон цикла это проверка всех моих чекбоксов (по крайней мере у меня в макросе так работает). Может быть проблема не в цикле, а действительно в ивах. Если есть предположения, буду рад их выслушать
 
Цитата
Hellmaster написал:
а что с ифом не так?
Да все так (или не так)
Он работает так, как вы его написали. А то, что он делает именно то, что ему велено, а не то, что он должен делать по вашему мнению, так это не его проблема.
Цитата
Hellmaster написал:
Если есть предположения  
Вам Sanja уже все переписал. Не нравится  Select Case - перепишите на If.
 
Цитата
Hellmaster написал:
я имел в виду, что каждый прогон цикла это проверка всех моих чекбоксов
Как понять "каждый"? Цикл For Each переберёт контролы ОДИН раз. Про какие ещё прогоны Вы говорите?
 
RAN, Да, он работает так, как я его написал, но работает не так как задумано. я сюда и написал, потому что у меня что-то не работает. Что конкретно я не знаю. Если sanja уже дал мне решение, то значит можно  не просматривать эту тему, но вы продолжаете писать, значит вам, видимо, есть чем помочь. Если же нет, то не понимаю зачем вы пишете сюда своё недовольство моим вопросом.
 
Цитата
Hellmaster написал:
не в цикле, а действительно в ивах.
И́ва (лат. Sálix) — род древесных растений семейства Ивовые (Salicaceae)  :D
По вопросам из тем форума, личку не читаю.
 
Sanja, спасибо, это то, что нужно. Все работает как надо
Страницы: 1
Читают тему (гостей: 1)
Наверх