将多个超链接添加到PowerPoint形状

时间:2016-11-18 00:47:30

标签: vba powerpoint powerpoint-vba

任务:我有一个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文本的右侧子部分。

什么不起作用:代码不会为形状中的每个代码字创建超链接,而是只获取找到代码字的每个形状的第一个单词并创建超链接。下面的图片显示了之前和之后的更清晰。

之前:

A slide before the code was executed

后:

The same slide after the code was executed

问题:是否有人知道如何让这段代码运行它应该如何运行?我现在真的吓坏了。

1 个答案:

答案 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的文本,然后创建超链接。