Я озадачен об этой вещи - при записи макроса, где я в основном добавляю некоторые поля и вхожу в Режим проектирования, чтобы смочь заменить фиктивный текст заполнителя. Теперь, я выхожу из Режима проектирования при записи макроса, и все, кажется, работает хорошо. Но при проигрывании макроса, это просто останавливается после ActiveDocument.ToggleFormsDesign
.
Что могло вызывать это? Кто-либо еще испытал это?
Вот отрывок макроса:
Selection.Range.ContentControls.Add (wdContentControlText)
ActiveDocument.ToggleFormsDesign
Selection.TypeText Text:="Date"
Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
Selection.Style = ActiveDocument.Styles("TextRed")
ActiveDocument.ToggleFormsDesign
Причина в том, что объект Selection
теряется после ToggleDesignMode
- то есть больше нет объекта Selection
. В записанном вами примере вы повторно выбрали место для ввода "Дата", но Word не знает, где выбрать.
Способ обойти это - использовать записанные макросы в качестве отправной точки, но затем дополнительно очистить их. Например, так:
Sub InsertContentControl()
Dim myDoc As Document
Set myDoc = ActiveDocument
Dim tr As Style
Set tr = myDoc.Styles("TextRed"):
Dim cc As ContentControl
Dim sel As Range
Set sel = Selection.Range
Set cc = sel.ContentControls.Add(wdContentControlText)
cc.SetPlaceholderText Text:="Date"
cc.DefaultTextStyle = tr
End Sub
Чтобы сделать это с новым стилем, используйте следующее:
Sub InsertContentControlwithNewStyle()
Dim myDoc As Document
Set myDoc = ActiveDocument
Dim tr As Style
Set tr = myDoc.Styles.Add("New TextRed")
tr.BaseStyle = wdStyleNormal
tr.Font.ColorIndex = wdRed
Dim cc As ContentControl
Dim sel As Range
Set sel = Selection.Range
Set cc = sel.ContentControls.Add(wdContentControlText)
cc.SetPlaceholderText Text:="Date"
cc.DefaultTextStyle = tr
End Sub