编辑超链接(x).texttodisplay 将幻灯片中文本框中的超链接移动到开头位置。

4
我在PowerPoint中使用VBA时遇到了问题——当我尝试编辑超链接的TextToDisplay属性时,它会编辑文本,但将超链接位置移动到文本框的开头。
第一次编辑时,我会将文本框的前几个字符更改为链接,然后在第二次编辑时,该链接会被重写。
我正在使用以下代码更新幻灯片在移动时超链接的页码。
Sub UpdatePageNumbers()

For Each sld In ActivePresentation.Slides
    For x = CInt(sld.Hyperlinks.Count) To 1 Step -1
        strParts = Split(sld.Hyperlinks(x).SubAddress, ",")
        PageNumber = ActivePresentation.Slides.FindBySlideID(CInt(strParts(0))).SlideNumber
        sld.Hyperlinks(x).TextToDisplay = "Page " & PageNumber
    Next
Next

End Sub

有人之前看到过这种情况/有解决办法吗?我进行了搜索,没有找到任何相关信息。

1个回答

4

我可以重现这种奇怪的行为。这个方法可能对你更有效。我已经明确地DIM了所有变量(一般来说是一个好习惯),并使用Longs而不是Integers,因为这是PPT在内部使用的类型。接下来,显然改变显示的文本也会改变或删除超链接(有时而不总是?太奇怪了!)。这会打乱循环计数器。因此,对于每个超链接,我存储了它的子地址,在进行任何文本更改后,重新应用了子地址。

Sub UpdatePageNumbers()

Dim sld As Slide
Dim x As Long
Dim strParts
Dim PageNumber As Long
Dim oHl As Hyperlink
Dim oTxtRange As TextRange
Dim sSubaddress As String

For Each sld In ActivePresentation.Slides
    'For x = CLng(sld.Hyperlinks.Count) To 1 Step -1
    For Each oHl In sld.Hyperlinks
        With oHl
            sSubaddress = .SubAddress
            strParts = Split(.SubAddress, ",")
            PageNumber = ActivePresentation.Slides.FindBySlideID(CLng(strParts(0))).SlideNumber
            'oHl.TextToDisplay = "Page " & PageNumber
            Set oTxtRange = .Parent.Parent
            oTxtRange.Text = "Page " & PageNumber
            oTxtRange.ActionSettings(1).Hyperlink.SubAddress = sSubaddress
        End With
    Next
Next

End Sub

谢谢Steve - 看起来它能工作了!在提问之前我花了一段时间研究这个问题 - 很奇怪的是它将超链接文本移动到文本框的前面,但编辑超链接是正确的。 - Nick
很高兴它对你有用...至于为什么它表现出这种行为,我猜测是多种因素的综合作用。 - Steve Rindsberg
请注意,此解决方案与设置TextToDisplay并不完全等同。如果您创建超链接而没有显式设置TextToDisplay,则将光标放在超链接后面并开始输入,添加的文本将成为超链接。在许多情况下,这可能是不希望看到的。 - OfficeAddinDev
更具体地说,这发生在超链接位于段落末尾时。 - OfficeAddinDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接