#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