4

PowerPoint の VBA に問題があります。ハイパーリンクの TextToDisplay プロパティを編集しようとすると、テキストは編集されますが、ハイパーリンクの場所がテキスト ボックスの先頭に移動します。

壊れたハイパーリンク

最初のパスでテキスト ボックスの最初の文字がリンクに変更され、2 回目のパスでそのリンクが書き換えられます。

次のコードを使用して、スライドが移動したときにハイパーリンクのページ番号を更新しています。

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

誰かがこれを前に見たことがありますか/解決策を考え出しましたか? 検索しても何も見つかりませんでした。

4

1 に答える 1

4

奇妙な動作を再現できます。これはあなたにとってよりうまくいくかもしれません。すべての変数を明示的に DIM するように変更し (一般的には良い方法です)、PPT が内部で使用しているため、Integer ではなく Long を使用しました。次に、明らかに表示テキストを変更すると、ハイパーリンクも変更または削除されます (常にではありませんが、奇妙なこともあります!)。これにより、ループカウンターがスローされます。代わりに、ハイパーリンクごとにサブアドレスを保存し、テキストに変更を加えてから、サブアドレスを後で再適用しました。

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
于 2012-11-02T15:27:11.633 に答える