我在使用Excel 2007生成的PDF中发现了一些奇怪的东西。我需要在工作表上创建带有超链接的TextBox,设置重复的标题行以进行打印,然后将工作表导出为PDF。
这是发生了什么。 PDF的第一页将显示TextBox,并且可以按预期方式单击作为链接。但奇怪的是,所有后续页面都会在第一页与TextBox大致相同的位置具有可点击的区域,但绝对是什么都没有 - 即第二页显然是空白的,但页面上有一个空白的可点击的区域,它将打开第一页的TextBox链接。 不期望。
以下是一些准确准备场景的代码:
' Run this procedure
Public Sub TestRepeatingHyperlinkHitArea()
Call AddDummyContent
Call CreateTextBoxWithHyperlink
ActiveSheet.PageSetup.PrintTitleRows = ActiveSheet.Rows(1).Address
Call ActiveSheet.ExportAsFixedFormat(xlTypePDF, _
"RepeatingHyperlinkHitArea.pdf", OpenAfterPublish:=True)
End Sub
Public Sub AddDummyContent()
' Needed only to create multiple pages
Call ActiveSheet.Cells.Clear
Dim i As Integer
For i = 1 To 300
ActiveSheet.Cells(i, 1).Value = i
Next i
End Sub
Public Sub CreateTextBoxWithHyperlink()
If ActiveSheet.Shapes.Count = 1 Then
Call ActiveSheet.Shapes(1).Delete
End If
Dim TB As Shape
Set TB = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
100, 100, 150, 50)
TB.TextFrame.Characters.Text = "I'm a textbox with a hyperlink"
Call ActiveSheet.Hyperlinks.Add(TB, "http://www.example.com")
End Sub
将其粘贴到空白工作簿中并运行TestRepeatingHyperlinkHitArea()
。它将准备ActiveSheet
并创建PDF。在PDF中,用鼠标在第二页上进行搜索,在上半部分中会有一个链接的命中区域(第1页的相同链接),但没有任何可见的。
这可以避免吗?我真的不想在页面上使用鬼链接。它似乎只在设置ActiveSheet.PageSetup.PrintTitleRows
时发生,并且只有第一页上的超链接作为鬼链重复。我假设超链接命中区域以某种方式呈现在与PrintTitleRows相同的层上。这很糟糕,因为它们在PDF中一起重复。
我尝试使用ActiveX标签作为超链接而不是普通的TextBox,因为它们没有出现这个问题(它们不会被渲染为Shapes?),但是在VBA中设置为超链接目标却很麻烦(无论我如何尝试将它们转换为Shapes,在ActiveX标签上调用ActiveSheet.Hyperlinks.Add()
都会失败并显示错误。还在努力。
欢迎使用重复标题行在PDF中创建超链接的任何想法。
编辑:生成的PDF文件的Dropbox链接:https://www.dropbox.com/s/un1q81vgpvvg6w0/RepeatingHyperlinkHitArea.pdf?dl=0