如何使用单词

时间:2015-12-03 09:17:10

标签: ms-word word-vba

我的word文档包含带有url的损坏图像。 我想用新的图像替换损坏的图像。我从之前的帖子中找到了一些解决方案。

我来到这里。

修改

我在暗示之后来到这里。

Sub BrokenImages2()
Application.ScreenUpdating = False
Dim StrTxt As String, HttpReq As Object, i As Long
Set HttpReq = CreateObject("Microsoft.XMLHTTP")
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^g"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = False
    .Execute Replace:=wdReplaceOne
  End With
  Do While .Find.Found
    If .Hyperlinks.Count > 0 Then
      s = .Hyperlinks(1).Address
    MsgBox s
        If InStr(s, "about") = 1 Then
        s = Replace(.Hyperlinks(1).Address, "about", "HTTP")
        MsgBox s
        With Dialogs(wdDialogInsertPicture)
        .Name = s
        .Execute
        End With
        End If
    End If
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
End Sub

上述代码的问题在于它不会替换图像,而是在选择时添加新图像。 请指导我如何正确地做到这一点。

2 个答案:

答案 0 :(得分:0)

您的Execute语句缺少执行实际替换的命令。尝试:.Find.Execute替换:= wdReplaceOne

答案 1 :(得分:0)

这就是我想要的

Sub BrokenImg()
Application.ScreenUpdating = False
Dim StrTxt As String, HttpReq As Object, i As Long
Set HttpReq = CreateObject("Microsoft.XMLHTTP")
Set rng1 = ActiveDocument.Range
With rng1
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^g"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = False
    .Execute
  End With
  Do While .Find.Found
    Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
    If .Hyperlinks.Count > 0 Then
      s = .Hyperlinks(1).Address
    MsgBox s
        If InStr(s, "about") = 1 Then
        s = Replace(.Hyperlinks(1).Address, "about", "https")
        MsgBox s
        MsgBox s
            rng2.InlineShapes.AddPicture FileName:= _
        s _
        , LinkToFile:=False, SaveWithDocument:=True
        End If
    End If
    .Collapse wdCollapseEnd
    .Find.Execute
    Set rng2 = Nothing
  Loop
End With
Set rng1 = Nothing
End Sub

这还有一个问题。首先找到需要选择。需要解决 在上面的代码中,如果光标点位于要找到的第一个图像上,它将完美地工作。

如果光标点位于其他位置,则会找到第一个图像,提取链接,修改链接但在光标点插入图像。如果文档中有下一个图像,则它会执行相同操作,但会在找到的第一个图像处对图像进行插入。上面代码的另一个问题是,我不知道如果它符合条件,如何删除原始图形。

我尝试修改上面这样的代码。

Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
    With rng2
        If .Hyperlinks.Count > 0 Then

但它无限循环。我缺乏经验可能是我身边的错误。

文件就在这里。 https://sites.google.com/site/rtsk2015/fo/BrokenArrow.docx?attredirects=0&d=1