在另一个工作表中创建超链接

7
我的工作簿的第一张表类似于目录页。A列中的每个单元格都保存着一个IP地址字符串。对于每个IP地址字符串,都有一个以该IP地址命名的工作表。
我想将A列中的字符串转换为指向其相应工作表(目标工作表的A1单元格)的超链接。
我只需要VBA代码行来制作超链接;循环等我可以自己解决。请记住,要链接到的工作表的名称与将成为链接的单元格的值相同。
研究只提供了一堆没有任何解释的代码论坛帖子。

1
你已经有哪些 VBA 了? - whytheq
记录宏,您将获得相应的VBA代码行 :) - Siddharth Rout
为什么不插入一个简单的公式?=HYPERLINK("[工作簿名称]工作表名称!A1", "显示文本") - Aprillion
2
你可以在链接位置前加上 # 来指定地址,例如 "#Sheet1!A1"。最好不要包含工作簿名称,以防工作簿被重命名或复制打开。 - lori_m
7个回答

18

这是我用来创建索引表的代码。

Sub CreateIndexSheet()
    Dim wSheet As Worksheet
    ActiveWorkbook.Sheets.Add(Before:=Worksheets(1)).Name = "Contents" 'Call whatever you like
    Range("A1").Select
    Application.ScreenUpdating = False 'Prevents seeing all the flashing as it updates the sheet
    For Each wSheet In Worksheets
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & wSheet.Name & "'" & "!A1", TextToDisplay:=wSheet.Name
        ActiveCell.Offset(1, 0).Select 'Moves down a row
    Next
    Range("A1").EntireColumn.AutoFit
    Range("A1").EntireRow.Delete 'Remove content sheet from content list
    Application.ScreenUpdating = True
End Sub

6
谢谢@Lee,我现在已将此模板应用到我的模板中。我做出了一个更改——用单引号包含工作表名称,以防用户创建带空格的工作表导致超链接中断。ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & wSheet.Name & "'" & "!A1", TextToDisplay:=wSheet.Name - user4074875

18

我录制了一个制作超链接的宏。这是结果。

ActiveCell.FormulaR1C1 = "=HYPERLINK(""[Workbook.xlsx]Sheet1!A1"",""CLICK HERE"")"

7

以下类似的代码将循环遍历 控制表格 中的 A列,并将单元格中的值转换为超链接。这不是我以前做过的事情,所以请原谅可能存在的错误:

Sub CreateHyperlinks()

Dim mySheet As String
Dim myRange As Excel.Range
Dim cell As Excel.Range
Set myRange = Excel.ThisWorkbook.Sheets("Control").Range("A1:A5") '<<adjust range to suit

For Each cell In myRange
    Excel.ThisWorkbook.Sheets("Control").Hyperlinks.Add Anchor:=cell, Address:="", SubAddress:=cell.Value & "!A1" '<<from recorded macro
Next cell

End Sub

我该如何使宏链接到一系列单元格?例如,在C1:C500中,我有所需引用的单元格的索引位置。因此,如果C1显示“20”,则宏应将A1链接到B20;如果C2显示“30”,则将A2链接到B30,以此类推。 - David Andrei Ned

3

感叹号符号"!"是关键元素。如果您有一个单元格对象(如以下代码示例中的"mycell"),并将单元格链接到此对象,您必须注意!元素。

您必须执行以下操作:

.Cells(i, 2).Hyperlinks.Add Anchor:=.Range(Cells(i, 2).Address), Address:="", _
     SubAddress:= "'" & ws.Name & "'" & _
     "!" & mycell.Address

1

这个宏会在工作表上添加一个超链接,链接名称与工作表名称相同,我还修改了范围以使其更加灵活,只需更改代码中的第一个单元格即可。效果非常好。

Sub hyper()
 Dim cl As Range
 Dim nS As String

 Set MyRange = Sheets("Sheet1").Range("B16")
 Set MyRange = Range(MyRange, MyRange.End(xlDown))

 For Each cl In MyRange
  nS = cl.Value
  cl.Hyperlinks.Add Anchor:=cl, Address:="", SubAddress:="'" & nS & "'" & "!B16", TextToDisplay:=nS
 Next
End Sub

1
如果您需要将Sheet1超链接到所有或相应的工作表,则可以使用简单的vba代码。如果您希望创建一个单选按钮,那么将此宏分配给该按钮即可,例如“主页”。
Sub HomePage()
'
' HomePage Macro
'


' This is common code to go to sheet 1 if do not change name for Sheet1
    'Sheets("Sheet1").Select
' OR 

' You can write you sheet name here in case if its name changes

    Sheets("Monthly Reports Home").Select
    Range("A1").Select

End Sub

0
在我的实现中,我所引用的单元格可能有几个选项。我使用了以下格式,其中'ws'是当前正在编辑的工作表。
For each ws in Activeworkbook.Worksheets
    For i…
       For j...
...
ws.Cells(i, j).Value = "=HYPERLINK(""#'" & SHEET-REF-VAR & "'!" & CELL-REF-VAR & """,""" & SHEET-REF-VAR & """)"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接