Chr(160)
и Chr(30)
.43003
и значение Дата_2 равно 44764
, то в формула ниже посчитается с ошибкой (будет значение ИСТИНА):{ IF { MERGEFIELD Дата_1 \@"DD.MM.YYYY' г.'" \* MERGEFORMAT } = { MERGEFIELD Дата_2 \@"DD.MM.YYYY' г.'" \* MERGEFORMAT } "ИСТИНА" "ЛОЖЬ" }
Option Explicit
'123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
Sub Replacement_tags()
Dim Content_Find As Find ' Объект Find
Set Content_Find = ActiveDocument.Content.Find
With Content_Find ' Найти маркер
.ClearFormatting: .Replacement.ClearFormatting ' Очистить формат
.MatchWildcards = False ' ВАЖНО! Отключить Подстановочные знаки
.Text = "[Шапка]": .Replacement.Text = "Начальнику управления..."
.Execute Forward:=True, Replace:=wdReplaceAll ' Заменить все маркеры [Шапка]
' Хитрость: перемещение курсора в конец заменённого текста
.Execute FindText:=.Replacement.Text, _
Forward:=True, Wrap:=wdFindStop, Replace:=wdReplaceNone
.Parent.Select ' Выделяем текст для управления курсором
'Selection.Collapse Direction:=wdCollapseEnd ' Курсор в конец найденного
End With
End Sub
.Replacement.Text = "Начальнику управления..." & String(3, Chr(13)) & "Начальнику управления..."
или вводить количество дублей в переменную Text
перед заменой:' Chr(13) - код символа возврата каретки. В других языках более привычная запись "\r"
CapText = "Начальнику управления..."
CapСount = InputBox("Введите количество 'Шапок'", , 1)
If Not CInt(Val(CapСount)) = CapСount Then _
MsgBox "Введите целое число", vbCritical: Exit Sub _
Else Text = CapText
While CapСount > 1
Text = Text & String(3, Chr(13)) & CapText
CapСount = CapСount - 1
Wend
' Используем хитрость из п.1, если планируем создать таблицу в месте маркера
Set tblNew = ActiveDocument.Tables.Add(Selection.Range, 3, 2)
With tblNew
.Columns(1).PreferredWidth = CentimetersToPoints(4) ' Колонка 1, Ширина 4 см
.Borders(wdBorderTop).LineStyle = wdLineStyleNone ' Границы таблицы, например
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
.Borders(wdBorderVertical).LineStyle = wdLineStyleDot
For i = 1 To 2
.Cell(1, i).Range.Text = "Строка 1; #" & i
Next i
.Cell(1, 1).Range.InsertAfter Chr(13) & "Строка 2" ' Добавить текст
.Cell(tblNew.Rows.count, tblNew.Columns.count).Range.InsertAfter "Последняя ячейка"
End With
Private Sub Document_Open()
Replacement_tags ' Процедура из п.1
End Sub
Данные для заполнения шаблона можно поместить в отдельный файл.
- Открыть MS Word, в тексте написать маркер [Шапка]
- Открыть VBA в приложении (Alt+F11)
- Выбирать в меню Insert -> Module
- Вставить процедуру (из п.1)
- Нажать F5 (запустится процедура, в которой установлен курсор)