在单元格中插入超链接并打开隐藏的工作表[Excel VBA]

时间:2017-12-13 15:10:28

标签: excel vba excel-vba hyperlink

我是excel VBA的新手,我正在尝试使用VBA代码在单元格中插入超链接。单击该值后,我希望能够打开隐藏的工作表。

到目前为止,我所做的是:使用 按钮 打开隐藏的工作表。

Sub mainModule(ByVal a_Sheets As String)

'Hide all tabs
For Each sht In ActiveWorkbook.Sheets
If sht.Name <> "MAIN" Then sht.Visible = xlSheetVeryHidden
Next

'View tabs when button is clicked
For i = 0 To UBound(Split(a_Sheets, ","))
Sheets(Split(a_Sheets, ",")(i)).Visible = True
Sheets(Split(a_Sheets, ",")(i)).Activate
Next

End Sub

Sub goHere_Click()

Call mainModule("BIRTHDAYS")

End Sub

我想要做的是当我点击“GO HERE”时,它会打开隐藏的表格。

enter image description here

此外,我找到了一些可以帮助我解决这个问题的方法。

Sub sbCreatingHyperLink()
ActiveSheet.Hyperlinks.Add Range("A5"), "https://www.google.com"
End Sub

可以帮我找出一种方法,而不是“https://www.google.com”,它会调用一个功能模块(Call mainModule("BIRTHDAYS"))?谢谢。

1 个答案:

答案 0 :(得分:1)

要动态创建超链接到Sheet1,您需要使用以下内容:

Sub foo()
Dim ws As Worksheet
i = 1
    For Each ws In ActiveWorkbook.Worksheets
    If ws.Name <> "Sheet1" Then
        Sheet1.Cells(i, 1).Hyperlinks.Add Anchor:=Sheet1.Cells(i, 1), Address:="", SubAddress:=ws.Name & "!A1", TextToDisplay:="Go To:"
        i = i + 1
    End If
    Next
End Sub

然后,您还需要更改Worksheet_FollowHyperlink以查看是否已单击超链接,如果是,则取消隐藏工作表并显示它。如下所示:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    If Target.Range.Address = "$A$2" Then
        Sheet2.Visible = xlSheetVisible
        Sheet2.Select
    End If
    'copy the if statement above for each hyperlink
End Sub

<强>更新

所以在我的测试中我有5张xlSheetVeryHidden除了第一张叫做“Main”的东西,当我在下面运行宏时会创建以下的超链接:

Sub foo()
Dim ws As Worksheet
i = 1
    For Each ws In ActiveWorkbook.Worksheets
    If ws.Name <> "Main" Then
        Sheets("Main").Cells(i, 1).Hyperlinks.Add Anchor:=Sheet1.Cells(i, 1), Address:="", SubAddress:=ws.Name & "!A1", TextToDisplay:="Go To:"
        i = i + 1
    End If
    Next
End Sub

上面的代码创建了以下代码(忽略第一张“Main”):

enter image description here

然后在第一张Sheet的代码后面输入了这段代码:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    If Target.Range.Address = "$A$2" Then
        Sheet2.Visible = xlSheetVisible
        Sheet2.Select
    End If
    'copy the if statement above for each hyperlink
End Sub

这是我放置代码的地方:

enter image description here

这个设置的问题在于,即使可以通过宏foo()动态创建超链接,要更改可见性,您必须手动添加每个Target.Range.Address来取消隐藏相关的工作表,所以在我的示例中,我只编写了它,以便如果用户单击包含超链接的工作表1的A2,则Sheet2将变为可见,您将导航到它...