任务:我有一个PowerPoint文件,其中包含带有文本的幻灯片。该文本包含代码字,我想用超链接替换。现在我正在使用下面的代码来实现这一目标。
For Each sld In prt.Slides
For Each shp In sld.Shapes
If shp.HasTextFrame Then
If shp.TextFrame.HasText Then
Set rngToSearch = shp.TextFrame.TextRange
Set rngFound = rngToSearch.Find("SomeLink")
Do While Not (rngFound Is Nothing)
With rngFound
With .ActionSettings(ppMouseClick)
.Action = ppActionHyperlink
.Hyperlink.Address = "http://www.SomeLink.de"
.Hyperlink.TextToDisplay = "SomeLink"
End With
.Font.Bold = msoFalse
Set rngFound = rngToSearch.Find("SomeLink", .Start + .Length - 1)
End With
Loop
End If
End If
Next shp
Next sld
什么有效:代码设法找到代码字 SomeLink 的所有出现,并且它使这个单词的每个出现都是粗体(我只是为测试目的而做) 。这告诉我,变量 rngFound 正常工作(即设置为每个TextFrame文本的右侧子部分。
什么不起作用:代码不会为形状中的每个代码字创建超链接,而是只获取找到代码字的每个形状的第一个单词并创建超链接。下面的图片显示了之前和之后的更清晰。
之前:
后:
问题:是否有人知道如何让这段代码运行它应该如何运行?我现在真的吓坏了。
答案 0 :(得分:0)
解决了它,但我认为这很有趣所以我不会删除这个问题,而是实际给出答案。所以下面的代码就可以了。
For Each sld In prt.Slides
For Each shp In sld.Shapes
If shp.HasTextFrame Then
If shp.TextFrame.HasText Then
Set rngToSearch = shp.TextFrame.TextRange
Set rngFound = rngToSearch.Find("SomeLink")
Do While Not (rngFound Is Nothing)
With rngFound
rngFound.Text = "SomeLink"
With .ActionSettings(ppMouseClick)
.Action = ppActionHyperlink
.Hyperlink.Address = "http://www.SomeLink.de"
End With
Set rngFound = rngToSearch.Find("SomeLink", .Start + .Length - 1)
End With
Loop
End If
End If
Next shp
Next sld
我改变了什么?好吧,基本上只有两行!我的错误是行.Hyperlink.TextToDisplay = "SomeLink"
。这与文本范围有些混乱。相反,我现在首先使用新行rngFound.Text = "SomeLink"
更改找到的Textrange的文本,然后创建超链接。