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