我正在通过VBA代码使用Excel工作簿中的数据创建一个自动文档生成工具。
下面的代码替换文本并插入图像,但是,它们会被推到文档的顶部。
有没有任何方法可以返回找到的文本的位置,根据位置声明一个范围,并使用它将内联形状(图像(插入tagName文本后面的行中?
我以前通过从Excel调用Word宏来完成这项工作,但是,这需要完全基于Excel
此程序将处理没有VBA的Word文档。
For Each sr2 In wDoc.StoryRanges
With sr2.Find
.Text = tagName
.Replacement.Text = tagValue
.Wrap = 1
.Execute Replace:=2
If .Found = True Then
sr2.InlineShapes.AddPicture fileName:=ThisWorkbook.Path & "1. SOW Templates Client Summary import.jpg"
End If
End With
Next sr2
要轻松地循环Find方法的结果,如果使用Replace:=wdReplaceOne
(wdReplaceOne=1(而不是Replace:=wdReplaceAll
(wdReplaceAll=2(会更容易。(基于此答案(。
若要插入图像,我建议您选择图像的范围。将其添加为自由浮动图像,然后将其转换为内联形状。
这里有一种方法:
Dim r As Object 'Word.Range
Dim bFound As Boolean
bFound = True
Set r = wDoc.Content
r.Find.ClearFormatting
Do While bFound
With r.Find
.Text = tagname
.Replacement.Text = tagValue
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute(Replace:=wdReplaceOne)
End With
If bFound Then
r.Select
Selection.Next(Unit:=wdParagraph, Count:=1).Select
Dim img As Object 'Word.Shape
Set img = wDoc.Shapes.AddPicture(Filename:=ThisWorkbook.Path & "1. SOW Templates Client Summary import.jpg")
img.ConvertToInlineShape
End If
Loop