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

标签 vba powerpoint

任务:我有一个 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

问题:有人知道如何使这段代码按预期运行吗?我现在真的吓坏了。

最佳答案

解决了,但我认为这很有趣,所以我不会只是删除问题,而是实际上给出答案。所以下面的代码就达到了目的。

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" 行。这在某种程度上扰乱了 Textrange。相反,我现在首先使用新行 rngFound.Text = "SomeLink" 更改找到的 Textrange 的文本,然后创建超链接。

关于vba - 将多个超链接添加到 PowerPoint 形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40667627/

相关文章:

vba powerpoint合并循环中的单元格

java - pptx4j绘制图表时出现重复数据

vba - 有没有办法使用 VBA 以编程方式更改 Word 2010 中 CanvasShapes 的 Z 顺序位置?

html - 如何在不使用 Sendkeys 的情况下在 Excel 中运行网站表单?

visual-studio - 点击一个按钮,该按钮将无法点击,直到重置

python - python-pptx 是否支持将文件保存为 pdf?

vba - 单步执行我的代码有效,运行我的代码会给出对象 "Method ' 的 'Selection' ShapeRange 失败”错误消息

excel - 运行时错误 13 : Type mismatch on Date using DateSerial

vba - 如何在另一个工作表中找到匹配的数据并获取单元格值?

java - 从服务通过 JACOB 调用时,Office 2007 无法打开文件