在单元格中插入超链接并打开一个隐藏表

我是新来的Excel VBA,我试图用一个VBA代码在一个单元格中插入一个超链接。 点击该值后,我希望能够打开一个隐藏的表单。

到目前为止我所完成的是:使用button打开一个隐藏的表单。

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”时,它会打开隐藏的表格。

在这里输入图像说明

而且,我发现了一些可以帮助我解决这个问题的东西。

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

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

要dynamic创build超链接到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 

更新:

所以在我的testing中,我有5张表,其中xlSheetVeryHidden除了第一个被称为“主”,当我运行下面的超链接创build的macros:

 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 

上面的代码创build了以下内容(忽略第一个表单“Main”):

在这里输入图像说明

然后在第一张工作表的代码后面input这个代码:

 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 

这是我放置代码的地方:

在这里输入图像说明

这样做的问题是,即使超链接可以通过macrosfoo()dynamic创build,为了改变可见性,你将不得不手动添加每个Target.Range.Address来取消隐藏相关的表单,所以在我的例子中我只编码它,以便如果用户单击包含超链接的工作表1的A2,然后Sheet2将变得可见,您将导航到它…