在单元格中插入超链接并打开一个隐藏表
我是新来的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将变得可见,您将导航到它…