在添加数据或排序列表后维护超链接

时间:2013-07-08 20:21:02

标签: excel hyperlink excel-formula match worksheet-function

我有几百个标题的列表,每个条目有几列(即名称,日期等)。在这些名称中,我添加的条目只是说“A”,“B”,“C”等,因为它可以更轻松地滚动文档,查找特定名称,知道在哪里 - 例如 - “H”启动。

随着列表的增长,我在文档顶部添加了超链接,以便能够跳转到A / B / C / etc.-条目。但是,当添加新数据并对其进行排序时,或者按日期或其他任何方式对列表进行排序时,超链接“转到:A”(作为示例)会保持链接到原始单元格 - A1 - 尽管该单元格的数据(实际文字“A”)现在在A42。

有没有通过排序和[主要]添加新数据来维护超链接?

3 个答案:

答案 0 :(得分:2)

  • 将Excel电子表格保存为“网页”(而不是“单个文件网页”。)
  • 在Excel中打开“网页”版本。
  • 排序。
  • 将其另存为Excel电子表格。

每个链接都将保留在适当的单元格中。

答案 1 :(得分:1)

A1中的公式是=HYPERLINK($I1,"Go to: "&H1),可以根据需要进行复制。

SO17535313 example revised

(= MATCH'不喜欢与搜索字母相同范围内的超链接单元格。)

或者在Row1中(但仍然在新的ColumnA中)并向下复制,而不需要ColumnH:I:

=HYPERLINK("[SO17535313.xlsx]Sheet1!"&"B"&MATCH(CHAR(64+ROW()),B:B,0),"Go to: "&CHAR(64+ROW()))

答案 2 :(得分:1)

Excel中存在与超链接和排序相关的已确认错误。

KB214328: Hyperlinks are removed or invalid after you sort cells that contain these hyperlinks in 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