微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA EXCEL,在找到的文字下方的行中将图像插入Word文档

如何解决VBA EXCEL,在找到的文字下方的行中将图像插入Word文档

我正在使用VBA代码通过Excel工作簿中的数据创建自动文档生成工具。我可以成功找到并替换文档中的文本并添加/插入图像。但是,我在将图像设置在文档中的正确位置时遇到了麻烦。下面的代码当前可以替换所有想要的文本并插入正确的图像,但是,它们只是被推入文档的顶部。

有什么方法可以返回找到的文本的位置,基于该位置声明一个范围,并使用该范围将inline-shape(image)插入正确的位置(tagName之后的行)文本)?这是我下面的find replace宏的一个片段。

上下文:我以前通过从excel调用单词宏使所有这些工作变得很容易,但是这需要完全基于excel。该程序将处理来自用户的许多不同文档,并且所有这些Word文档中都将没有vba。

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),则会更容易。 (基于此this answer)。

要插入图像,建议您选择想要图像的范围。将其添加为自由浮动图像,然后将其转换为嵌入式形状。

这是一种实现方法:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。