Пользовательская форма VBA с текстовым полем - форматирование текста

поэтому я очень новичок в VBA. Я создал очень простой шаблон, который при открытии дает мне форму для заполнения, которая будет вставлять текст в документ с помощью командной кнопки.

Я пытаюсь сделать еще один шаг вперед, но не уверен, как собрать код вместе. Чтобы вставить текст, я использую функцию закладок. В моей форме у меня есть 4 текстовых поля, которые действуют как параметры. Если все 4 заполнены, текст выглядит так:

Опция1Опция2Опция3Опция4

Мне нужно, чтобы это выглядело так:

Вариант 1, Вариант 2, Вариант 3 и Вариант 4

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

Вариант1 и Вариант2

Имеет ли это смысл? Ниже показано, как она устроена в настоящее время. Я был бы признателен за любые указатели в продвижении вперед.

Private Sub cmdSubmit_Click()
    Application.ScreenUpdating = False
    With ActiveDocument
        .Bookmarks("Program1").Range.Text = TextBox1.Value
        .Bookmarks("Program2").Range.Text = TextBox2.Value
        .Bookmarks("Program3").Range.Text = TextBox3.Value
        .Bookmarks("program4").Range.Text = TextBox4.Value
        End With
    Application.ScreenUpdating = True
    Unload Me
End Sub

person Tianya Coachman    schedule 30.09.2012    source источник


Ответы (1)


Если эти закладки являются смежными, нет необходимости в четырех закладках. Добавьте следующие переменные уровня модуля:

Private s As String, hasAnd As Boolean

Создайте Sub, который добавляет текст текстового поля к частной переменной, вставляя запятую или and по мере необходимости:

Private Sub AppendText(txt As TextBox)
If Len(txt.Text) = 0 Then Exit Sub

If Len(s) = 0 Then
    s = txt.Text
ElseIf Not hasAnd Then
    hasAnd = True
    s = txt.Text & " and " & s
Else
    s = txt.Text & ", " & s
End If
End Sub

Вызовите подпроцедуру для каждого текстового поля в обратном порядке:

AppendText TextBox4
AppendText TextBox3
AppendText TextBox2
AppendText TextBox1

Затем используйте значение s в качестве текста закладки:

ActiveDocument.Bookmarks("Program1").Range.Text = s
person Zev Spitz    schedule 10.10.2012