我正在尝试从Visual Basic程序中导出Word文档。文档的不同部分将需要不同的格式。
我有几个段落,我只需要将每个段落的部分加粗。我试图在每个段落中设置需要加粗的范围,但是无论我做什么,它似乎都只想加粗 entire 段落。
我想做这样的事情:
Dim Para1 As Word.Paragraph
Para1 = WordDoc.Content.Paragraphs.Add
Para1.Range.Start = 1
Para1.Range.End = 14
Para1.Range.Font.Bold = True
Para1.Range.Text = "Job number is: " + myJobID
...以便它从'J'到':'(在Para1.Range.Text中)加粗,但不加粗myJobID(这是我从用户那里得到的变量)。但是,无论我做什么,它都会加粗整个段落,包括myJobID。
我也尝试过创建一个Range变量来设置基于整个文档的范围,但是问题是,我在Word文档上输出的多个变量的长度将有所不同,并且因此,没有办法知道我要加粗的下一节的开始位置。因此,基本上,我必须在Paragraph对象中工作,而不是遍历整个文档中的所有字符。
希望如此。有什么想法吗?
答案 0 :(得分:1)
创建另一个Range
对象,该对象仅包含要加粗的字符。
下面的代码未经测试(在此计算机上未设置完整的VS),但应该可以给您一个提示:
Dim para1 As Word.Paragraph
Dim textToBeBolded As Word.Range
para1 = WordDoc.Content.Paragraphs.Add 'ThisDocument.Paragraphs.Add in VBA
para1.Range.Text = "Job number is: " + myJobID
para1.Range.SetRange 1, 14
textToBeBolded = para1.Range
textToBeBolded.SetRange 1, 14
textToBeBolded.Font.Bold = True
答案 1 :(得分:1)
为了格式化单个文本行,必须在插入时将文本分解为单个行。另外,最好使用独立的Range
对象。在格式化命令之间,Range
需要“折叠”-就像按选择的向右(或向左)箭头使其成为闪烁的光标一样。遵循这些思路
Dim Para1 As Word.Paragraph
Dim rng as Word.Range
Para1 = WordDoc.Content.Paragraphs.Add
rng = Para1.Range
rng.Text = "Job number is: "
rng.Font.Bold = True
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
rng.Text = myJobID
rng.Font.Bold = False
rng.Collapse Word.WdCollapseDirection.wdCollapseEnd
如果确实有必要一口气插入全文,则查找/替换以定位应采用不同格式的文本是事后格式化的一种方法,尽管效率较低。
另一种可能性是使用字符串操纵函数,例如Instr
(或Contains
),Left
,Mid
等,以确定子字符串在较长的字符串中的何处位于。然后Range.Start
和Range.End
可以使用这些值。但是通常最好不要使用start
和end
的值,因为Word可以插入不可见的字符,从而使该编号失效。