Excel 中存在与超链接和排序相关的公认错误。
KB214328:在 Excel 中对包含这些超链接的单元格进行排序后,超链接被删除或无效
我应该注意,就我而言,我正在为 Excel (ProjecWise) 之外的文档创建超链接。
我的解决方法是将所有超链接作为文本存储在一列中,并使用 Excel Hyperlink() 函数为另一列中的每一行生成超链接。如果要从外部源(如浏览器)粘贴超链接,请选择单元格,然后将链接粘贴到功能区下方的功能框中,而不是直接粘贴到单元格中。这将为您提供文本,而不是在单元格中创建超链接对象。
我不完全理解这个问题,但是根据我对 Excel 处理超链接的方式的新理解,单元格中的超链接以某种方式链接到工作表对象上的超链接集合。当您对工作表上的行进行排序时,工作表超链接引用开始返回错误引用。我找不到工作表超链接引用的唯一“句柄”,但注意到 h.Parent.Top 在我排序时正在发生变化。
Public Sub ShowSheetHyperlinks()
' Use this to demonstrate the issue acknowledged here: http://support.microsoft.com/kb/214328
' Add some hyperlinks in a column of a spreadsheet and random values in a column next to it.
' Run this routine. Then sort the values by the first or second column and run this routine again.
' You may have to do this a few times, and/or copy and paste your hyperlink cells to other cells.
' Eventually you will see that the results change after the two columns are sorted.
' (You may not need two columns, but it may help to randomize the sorting.)
Dim h As Hyperlink
Debug.Print "Hyperlinks on " & ActiveSheet.Name & ": " & ActiveSheet.Hyperlinks.Count
For Each h In ActiveSheet.Hyperlinks
' After you sort the list of hyperlinks, you will notice the values in the
' three columns below. I am truncating the address to just see the last 20 characters.
Debug.Print h.TextToDisplay, h.Parent.Top, Right(h.Address, 20)
Next
End Sub