【问题标题】:Error when inserting image using variable for Selection.InlineShapes.AddPicture使用 Selection.InlineShapes.AddPicture 的变量插入图像时出错
【发布时间】:2020-06-17 10:18:08
【问题描述】:

我正在尝试浏览一个 word 文档,并将现有的图像路径字符串替换为实际图像。当我输入硬编码的地址时,它可以工作。但是,如果我将相同的代码放入变量中,则会出现错误

错误:

运行时错误“5152”:

这不是一个有效的文件名。
请尝试以下一项或多项:
* 检查路径以确保输入正确,
* 从文件和文件夹列表中选择一个文件。

代码:

Sub InsertJPGs()
    For Each singleLine In ActiveDocument.Paragraphs
        Dim Value As Variant
        Dim imageName As String
        Options.DefaultFilePath(wdDocumentsPath) = "d:\Downloads\ReportImages\"
        originalLineText = singleLine.Range.Text
        lineText = singleLine.Range.Text
        If InStr(lineText, ".jpg") <> 0 Then
            singleLine.Range.Select
            rangeText = singleLine.Range.Text
            imageName = rangeText
            imageName = "D:\Downloads\ReportImages\" & rangeText
            'imageName = "D:\Downloads\ReportImages\PictureImportTest_ATTICSkylight#1#_img2.jpg"
            Selection.InlineShapes.AddPicture FileName:= _
                imageName, LinkToFile:=True, SaveWithDocument:=True
        End If
        If InStr(lineText, "[[[IMAGE LIST]]]") <> 0 Then
            Exit For
        End If
    Next singleLine
End Sub

【问题讨论】:

  • 是的,它是 VBA,我的错
  • 在代码顶部插入 Option Explicit。声明所有变量。避免使用变体。我怀疑 VBA 是否允许您将声明放在一个循环中。不要Select 任何东西。 singleline 是什么?一个词,一个字符,一个句子,一个段落? Word 中没有,只有 Word 在屏幕上显示的内容。 rangetext 是单行的派生词。如果 singleline 未定义,rangetext 会是什么?在将代码分配给 imagename 之前,在代码中插入一个中断并检查其值。
  • OP 代码错误的最可能来源是“singleLine.Range.Text”包含一个段落分隔符 - 它不能构成文件名的一部分。

标签: vba image ms-word insert inline-images


【解决方案1】:

试试:

Sub Demo()
Application.ScreenUpdating = False
Dim FlNm As String: Const StrPath As String = "d:\Downloads\ReportImages\"
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "<[! ^t^l^13]@.[Jj][Pp][Gg]>"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .Execute
  End With
  Do While .Find.Found
    FlNm = .Duplicate.Text
    .Text = vbNullString
    .InlineShapes.AddPicture StrPath & FlNm, False, True, .Duplicate
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
End Sub

如果要保留文档中的文件名,请删除或注释掉:

.Text = vbNullString

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2012-05-05
    • 2013-11-29
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多