2012-11-02 57 views
2

我在PowerPoint中遇到VBA問題 - 當我嘗試編輯超鏈接的TextToDisplay屬性時,它編輯文本,但移動超鏈接位置到文本框的開頭。編輯超鏈接(x).texttodisplay將超鏈接移動到PowerPoint中文本框的開頭

broken hyperlinks

在第一遍,我得到的文本框的第一個字符變成鏈接,然後在第二次,該鏈接被改寫。

我使用以下代碼更新幻燈片移動時超鏈接的頁碼。

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 

有沒有人見過這個/想出一個解決方案?有一個搜索,找不到任何東西。

回答

3

我可以重現奇怪的行爲。這可能對你更好。我已經將它改爲顯式地DIM所有變量(通常是良好實踐),並且使用Long而不是整數,因爲這是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 
+0

謝謝史蒂夫 - 它似乎工作!在問這個問題之前花了一段時間 - 它看起來很奇怪,它將超鏈接文本移動到文本框的前面,但正確地編輯了超鏈接。 – Nick

+0

很高興它爲你工作...至於爲什麼它的行爲方式,我懷疑是事物的匯合。 –