Как сослаться на строку или строку таблицы, которую я только что вставил - PullRequest
0 голосов
/ 27 января 2019

Мне кажется, мне не хватает чего-то очевидного. Я использую VBA для создания документа Word, записывая строки по одному за раз. После того, как я написал строку, мне нужно отформатировать ее - это может быть выделение жирным шрифтом, установка табуляции и т. Д. Но для того, чтобы отформатировать строку, я должен иметь возможность ссылаться на нее. Все средства форматирования работают с диапазоном или выделением - как определить строку, которую я только что вставил, как диапазон, с которым я хочу работать? (Кроме того, тот же вопрос для строк таблицы, так как документ также включает таблицы, которые я строю по одной строке за раз, и мне нужно форматировать ячейки по мере продвижения).

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Это способ вставить текст и отформатировать его по мере необходимости, используя объект Range.Лучше , чем попытаться смоделировать работу пользователя, используя Selection и TypeText.Код работает медленнее, а точнее работать сложнее.Может быть только один объект Selection, но код может работать со многими диапазонами ...

Другой важный момент, который следует помнить, - объявлять и создавать экземпляры объектов по мере их создания - например, таблиц и строк таблиц.

Dim rng1 as Word.Range, rng2 as Word.Range
Set rng1 = ActiveDocument.Content
rng1.Text = "line one" & vbCr
rng1.Font.Bold = True
rng1.Collapse wdCollapseEnd
rng1.Text = "line two" & vbCr
rng1.Font.Bold = False
rng1.Collapse wdCollapseEnd
Set rng2 = rng1.Duplicate
rng2.Text = "line three" & vbCr
rng2.Font.Italic = True
'You can still work with the first range
rng1.ParagraphFormat.Alignment = wdAlignParagraphCenter
'
Dim tbl as Word.Table, rw1 as Word.Row, rw2 as Word.Row
Set tbl = ActiveDocument.Tables.Add
Set rw1 = tbl.Rows(1)
Set r2 = tbl.Rows.Add
0 голосов
/ 27 января 2019
Sub FormatBold()
Dim StartWord As String, EndWord As String
StartWord = "STARTSTART"
EndWord = "ENDEND"

With ActiveDocument.Content.Duplicate
    .Find.Execute Findtext:=StartWord & "*" & EndWord, MatchWildcards:=True
    .MoveStart wdCharacter, Len(StartWord)
    .MoveEnd wdCharacter, -Len(EndWord)
    .Font.Bold = True ' Or whatever you want to do
End With

End Sub

Форматируйте текст во время написания:

Sub StartTyping()

Selection.TypeText Text:="This is the "
Selection.Font.Bold = wdToggle
Selection.TypeText Text:="sentence"
Selection.Font.Bold = wdToggle
Selection.TypeText Text:=" I am inserting." & vbCr

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...