3

我有一个包含几百个标题的列表,每个条目有几列(即名称、日期等)。在名称中,我添加了只写“A”、“B”、“C”等的条目,因为它使滚动文档、查找特定名称、知道在哪里——例如——“H”时更容易开始。

随着列表的增长,我在文档顶部添加了超链接,以便能够跳转到 A/B/C/etc.-entries。但是,当添加新数据并将其排序时,或者按日期或其他任何内容对列表进行排序时,超链接“转到:A”(例如)会继续链接到原始单元格 - A1 - 尽管该单元格的数据(实际文本“A”)现在位于 A42 中。

无论如何通过排序和[主要]添加新数据来维护超链接?

4

3 回答 3

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

每个链接都将保存在相应的单元格中。

于 2015-02-25T21:20:01.867 回答
1

A1 中的公式=HYPERLINK($I1,"Go to: "&H1)将酌情抄录下来。

SO17535313 示例已修改

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

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

=HYPERLINK("[SO17535313.xlsx]Sheet1!"&"B"&MATCH(CHAR(64+ROW()),B:B,0),"Go to: "&CHAR(64+ROW()))
于 2013-07-08T23:49:22.457 回答
1

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
于 2014-02-21T22:12:20.890 回答