VBA: Как вставить запятые между несколькими значениями?

Автор Илья, 27 августа 2014, 14:58

Илья

Каким образом можно вставить запятые между значениями?
См. вложение.

[вложение удалено администратором]

Администратор

Вот так можно вставить запятые:
    UserForm1.TextBox1.Value = CheckBox1.ControlTipText & ", " & _
                                CheckBox2.ControlTipText & ", " & _
                                CheckBox3.ControlTipText

Вместо символа "&" можно использовать "+", но я всегда использую символ "&" для соединения фрагментов в одну строку.

Илья

Это известный вариант, его минус заключается в том, что, к примеру, если выбрать только CheckBox "Яблоко", в TextBox1 отобразится следующее: ", , Яблоко", а лишние запятые не допустимы в моем случае.
См. новый пример.

[вложение удалено администратором]

Администратор

Код:
Private Sub CommandButton1_Click()
   
    Dim myCheckBox As MSForms.CheckBox
    Dim strRes As String
    Dim i As Long
   
   
    'Помещение в свойства "ControlTipText" текста.
        'Не знаю, зачем это надо - в коде ниже это не используется.
    If CheckBox1.Value = True Then CheckBox1.ControlTipText = "Груша"
    If CheckBox2.Value = True Then CheckBox2.ControlTipText = "Слива"
    If CheckBox3.Value = True Then CheckBox3.ControlTipText = "Яблоко"
   
    'Просмотр всех чекбоксов. У чекбоксов имя должно иметь корень "CheckBox".
    For i = 1 To 3 Step 1
        'Если стоит флажок.
        If Me.Controls("CheckBox" & i).Value = True Then
            'Запись в переменную "strRes".
            strRes = strRes & Me.Controls("CheckBox" & i).Caption & ", "
        End If
    Next i
   
    'Удаление с конца заранее вставленной запятой.
    'Если ни одного флажка не было, то в переменной "strRes" будет пусто и будет ошибка,
        'если попробуем в этом случае использовать команду "Left".
    If strRes <> "" Then
        strRes = Left(strRes, Len(strRes) - 2)
    End If
   
    'Вставка результата в форму.
    UserForm1.TextBox1.Value = strRes
   
    'Закрытие и выгрузка формы из оперативной памяти компьютера.
    Unload Me
   
End Sub
[свернуть]

Илья