Word- VBA- Почему текст-заполнитель изменяется после ввода значений в Content Control?

#vba #ms-word

#vba #ms-word

Вопрос:

Следующий код успешно работает для вставки расширенного текста элемента управления содержимым с текстом-заполнителем «test1» в Arial, шрифтом 8, красным и курсивом. Однако, как только вы вводите текст в элемент управления содержимым, шрифт, размер и цвет заполнителя возвращаются к настройкам по умолчанию.

Как мне предотвратить возврат текста-заполнителя к настройкам по умолчанию?

 Dim oTable As Table
Dim oCell As Cell
Dim oCC As ContentControl
Dim oNewRow As Row
    Set oTable = ActiveDocument.Tables(1)
    Set oNewRow = oTable.Rows.Add
    Set oCell = oNewRow.Cells(1)
    Set oCC = ActiveDocument.ContentControls.Add(wdContentControlRichText, oCell.Range)
    With oCC
        .DefaultTextStyle = "Style1"
        .Tag = "Test1"
        .Setplaceholdertext , , "test1"
        If oCC.ShowingPlaceholderText Then
            With oCC.Range.Font
                .Name = "Arial"
                .Size = 8
                .ColorIndex = wdRed
                .Italic = True
            End With
        End If
    End With
End Sub
 

Комментарии:

1. Я подозреваю, что логика заключается в том, что форматирование применяется к диапазону. В новом элементе управления диапазон может состоять из 1 или 0 символов. Когда пользователь выбирает элемент управления, что именно он выбирает? Если он выберет форматированный диапазон, все, что он вводит, примет указанный вами формат. Но если он просто поместил курсор в элемент управления, выделение отсутствует, и все, что он вводит, будет рядом с диапазоном, который вы отформатировали, а не на нем. Соответственно, решением было бы либо управлять тем, что выбрано при вводе , либо изменять настройки по умолчанию для каждого элемента управления по отдельности (если это возможно).

Ответ №1:

Форматирование текста-заполнителя определяется стилем «Текст-заполнитель».

Если вы хотите, чтобы текст элемента управления содержимым имел определенное форматирование после ввода текста, вы можете назначить DefaultTextStyle свойству стиль.

Комментарии:

1. Я назначил . DefaultTextStyle = «Style1» для элемента управления содержимым. Где я могу назначить стиль тексту-заполнителю, чтобы он не возвращался к стилю по умолчанию после ввода значений?

2. Вау….. Я особенный. Однако единственный способ заставить его работать — использовать With ActiveDocument.Styles("Placeholder Text").Font вместо With oCC.Range.Font which устанавливает текст-заполнитель для всего документа. Как мне сделать именно эту конкретную ячейку?

3. Весь смысл текста-заполнителя в том, что он должен выглядеть иначе, чем завершенный текст. Это показывает пользователю, что есть что заполнить. Если по какой-то причине вы не хотите следовать этому соглашению, просто используйте код в своем вопросе.

4. Извините. Позвольте мне уточнить. Я хочу иметь разные стили текста-заполнителя в одном документе, но With ActiveDocument.Styles("Placeholder Text").Font устанавливает текст-заполнитель для всего документа и With oCC.Range.Font не позволяет мне назначить стиль.

5. Как я уже сказал, используйте код в вашем вопросе.

Ответ №2:

 Dim oTable As Table
Dim oCell As Cell
Dim oCC As ContentControl
Dim oNewRow As Row
    Set oTable = ActiveDocument.Tables(1)
    Set oNewRow = oTable.Rows.Add
    Set oCell = oNewRow.Cells(1)
    Set oCC = ActiveDocument.ContentControls.Add(wdContentControlRichText, oCell.Range)
    With oCC
        .DefaultTextStyle = "Style1"
        .Tag = "Test1"
        .Setplaceholdertext , , "test1"
        If oCC.ShowingPlaceholderText Then
            **With ActiveDocument.Styles("Placeholder Text").Font**
                .Name = "Arial"
                .Size = 8
                .ColorIndex = wdRed
                .Italic = True
            End With
        End If
    End With
End Sub