Excel VBA - запись нескольких значений флажков пользовательской формы в одну ячейку

Я пытаюсь взять значения, переданные из пользовательской формы с 4 параметрами флажка, и записать их в одну объединенную ячейку.

Когда я выбираю свою пользовательскую форму следующим образом:

введите здесь описание изображения

Я хотел бы сохранить его в одной ячейке следующим образом:

введите здесь описание изображения

Я попытался сделать это с помощью следующего кода (см. ниже), но он не работает с запятыми и т. д., если только 2-й, 3-й или 4-й элемент выбран без первого. Я убежден, что есть лучший способ, но я не могу понять или найти ответ в Интернете.

Private Sub cmdSave_Click()
  Dim colors As String

   If chkRed = True Then
      colors = "Red"
   Else
      colors = colors
   End If

   If chkBlue = True Then
      colors = colors & ", Blue"
   Else
      colors = colors
   End If

   If chkGreen = True Then
      colors = colors & ", Green"
   Else
      colors = colors
   End If

   If chkYellow = True Then
      colors = colors & ", Yellow"
   Else
      colors = colors
   End If

   With colorsSheet
      .Cells(ActiveCell.Row, 1).Value = colors
   End With

   Unload Me

End Sub

person ReidC    schedule 11.03.2013    source источник


Ответы (2)


Переименуйте элемент управления фреймом в frameColours, затем вы можете зациклить его флажки и построить свою строку;

Dim chk as Control
Dim colors as string, delimiter as string

for Each chk In Me.frameColours.Controls
    if typeOf chk Is msforms.CheckBox then
        if (chk.Value) then
            colors = colors & delimiter & chk.Caption
            delimiter = ","
        end if
    end if
next

With colorsSheet
    .Cells(ActiveCell.Row, 1).Value = colors
End With
person Alex K.    schedule 11.03.2013
comment
Алекс, отлично выглядит. Большое спасибо. Я попробую это здесь и дам вам знать, как это происходит. Я не научился делать это раньше и знал, что должен быть лучший выход. - person ReidC; 11.03.2013
comment
Работал отлично. Единственное изменение, которое мне нужно было сделать, это добавить пробел к разделителю, чтобы изменить его с , на , - person ReidC; 11.03.2013

Если вы хотите удалить начальную запятую из вывода, например «, синий, зеленый, желтый», вам придется изменить код, который добавляет эти строки, чтобы проверить, является ли colors пустым. Что-то типа:

If chkBlue = true Then
    If colors = "" Then
        colors = "Blue"
    Else
        colors = colors & ", Blue"
    End If
End If

Поскольку «Красный» — это первый цвет, который вы добавляете, вы можете предположить, что colors пусто:

If chkRed = True Then
      colors = "Red"
End If

Вам не нужно Else ... colors = colors

person Tim    schedule 11.03.2013
comment
Мне нравится (и проголосовал) решение @Alex K. Он использует меньше кода и не потребует изменений кода, если вы добавите цвета. - person Tim; 11.03.2013
comment
Тим, ты прав. У Алекса есть отличное решение. Мне нравится и ваш, потому что он исправляет мой код в том виде, в каком он есть. Рад иметь 2 способа выполнить то, что я намеревался сделать. Спасибо. - person ReidC; 11.03.2013