Страницы: 1
RSS
Если заполнено несколько чекбоксов, то вывести значения заполненных в ячейку
 
Добрый день. Имеется юзерформ с 5 чекбоксами. В работе их может быть заполнено от 1 до 5. Задача в следующем:
Если есть заполненные чекбоксы, то как вывести их значение в ячейку? Мой код ниже:
Код
Public sub cb()
Dim cb As Integer
cb = 0
If FlowSwitcherForm.cat_fr_1 <> "" Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_sh_1 <> "" Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_alc_1 <> "" Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_of_1 <> "" Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_z_1 <> "" Then
    cb = cb + 1
End If
With Worksheets("Расчет")
fr = Range("A1").End(xlDown)
  If cb = 1 Then
    Cells(fr, 1) = FlowSwitcherForm.frmKust1 And Cells(fr, 3) = FlowSwitcherForm.rcNow1 And Cells(fr, 3) = FlowSwitcherForm.rcTo1 And Cells(fr, 2) = cb.Value
  End If
End With
Конкретно интересует, как вывести в Cells(fr,2)= значение заполненного чекбокса?
 
Посмотрите тут. Что-то похожее.
 
Hellmaster, добрый день, а что вы имеете в виду под значением заполненного чекбокса? Checkbox ведь может быть либо True, либо False - по сути, это галочка; что вы имеете в виду под значением?
 
Framed, каждому чекбоксу у меня присвоено значение. К примеру, чекбокс FlowSwitcherForm.cat_alc_1 это "Алк", чекбокс FlowSwitcherForm.cat_z_1 это "З". Хотя, я не понял как это работает. По примеру, который скинул Grim x="З", а по моему макросу чекбоксы=True или False
Изменено: Hellmaster - 09.09.2019 17:51:05
 
Hellmaster, попробуйте:
Код
Sub Checkboxes()
    Dim ctl As control, i%
    i = 1
    For Each ctl In Userform1 'Здесь поменяйте Userform1 на актуальное
        If TypeName(ctl) = "CheckBox" Then
            If ctl.Object.Value = True Then 
                ActiveSheet.Cells(1, i).Value = ctl.Name
                i = i + 1
            End If
        End If
    Next ctl
End Sub
 
Проблема решена. Если кому-то интересно, ниже код:
Код
Dim cb As Integer
Dim fr As Long

cb = 0
If FlowSwitcherForm.cat_fr_1 = True Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_sh_1 = True Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_alc_1 = True Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_of_1 = True Then
    cb = cb + 1
End If
If FlowSwitcherForm.cat_z_1 = True Then
    cb = cb + 1
End If
With Worksheets("Расчет")
fr = .Cells(1, 1).End(xlUp).Row + 1 'первая пустая строка на листе, в который вставляем
  If cb = 1 Then
    .Cells(fr, 1).Value = frmKust1.Value 'перенос в ячейку значения из ComboBox
    .Cells(fr, 3) = rcNow1.Value  'перенос в ячейку значения из TextBox1
    .Cells(fr, 4).Value = rcTo1.Value   'перенос в ячейку значения из TextBox2
      If FlowSwitcherForm.cat_fr_1 = True Then Cells(fr, 2) = "F"  'перенос в ячейку значения Checkbox1
      If FlowSwitcherForm.cat_sh_1 = True Then Cells(fr, 2) = "D"   'перенос в ячейку значения Checkbox2
      If FlowSwitcherForm.cat_alc_1 = True Then Cells(fr, 2) = "A"   'перенос в ячейку значения Checkbox3
      If FlowSwitcherForm.cat_of_1 = True Then Cells(fr, 2) = "OF"   'перенос в ячейку значения Checkbox4
      If FlowSwitcherForm.cat_z_1 = True Then Cells(fr, 2) = "Fr"   'перенос в ячейку значения Checkbox5
  End If
End With
Изменено: Hellmaster - 10.09.2019 16:52:30
 
Цитата
Hellmaster написал: Проблема решена.
Да ну? А как же
Цитата
Hellmaster написал: Если есть заполненные чекбоксы, то как вывести их значение в ячейку?
Ваш макрос записывает в ячейку только одно значение.
Если же достаточно одного (а в верхней части мароса Вы проверяете, не стоит ли больше одной галки), то вместо галочек правильнее применить радиокнопки.
 
vikttur,
Цитата
vikttur написал:
Ваш макрос записывает в ячейку только одно значение
Да, вы правы. Эта проверка на количество выделенных чекбоксов нужна для дальнейшего кода. В данном случае, строки по нахождению cb и If cb=1 лишние. Это я наспех код вставил, не посмотрев.
 
Так может
Цитата
правильнее применить радиокнопки.
 
Hellmaster, Подскажите, а в этой части кода, часть данных заполняется на листе "Расчет", а часть на активном, это так и должно быть или нет?
Код
With Worksheets("Расчет")
fr = .Cells(1, 1).End(xlUp).Row + 1 'первая пустая строка на листе, в который вставляем
  If cb = 1 Then
    .Cells(fr, 1).Value = frmKust1.Value 'перенос в ячейку значения из ComboBox
    .Cells(fr, 3) = rcNow1.Value  'перенос в ячейку значения из TextBox1
    .Cells(fr, 4).Value = rcTo1.Value   'перенос в ячейку значения из TextBox2
      If FlowSwitcherForm.cat_fr_1 = True Then Cells(fr, 2) = "F"  'перенос в ячейку значения Checkbox1
      If FlowSwitcherForm.cat_sh_1 = True Then Cells(fr, 2) = "D"   'перенос в ячейку значения Checkbox2
      If FlowSwitcherForm.cat_alc_1 = True Then Cells(fr, 2) = "A"   'перенос в ячейку значения Checkbox3
      If FlowSwitcherForm.cat_of_1 = True Then Cells(fr, 2) = "OF"   'перенос в ячейку значения Checkbox4
      If FlowSwitcherForm.cat_z_1 = True Then Cells(fr, 2) = "Fr"   'перенос в ячейку значения Checkbox5
  End If
End With
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх