是否可以创建一个宏,它将创建一个将运行宏的超链接

时间:2018-04-10 10:42:45

标签: vba excel-vba hyperlink excel

我只是想知道你是否可以创建一个宏,它将超链接一个单元格并为其分配一个单独的宏?

我知道您可以使用超链接使用以下

运行宏
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
       Call Macro Name
End Sub

我也知道您可以使用宏来使用以下

创建超链接
With Worksheets(1) 
 .Hyperlinks.Add Anchor:=.Range("a5"), _ 
 Address:="", _ 
 ScreenTip:="", _ 
 TextToDisplay:= ""
End With 

无论如何将这些放在一起?或者有没有办法使用第二个代码来分配宏?而不是地址?

因此,如果我创建一个从原始数据选项卡中获取数据的宏,并将其放入这样的表中

Table with Hyperlinks

然后,宏需要为值(4,2,5,2,5)指定一个超链接,该超链接将在单击时运行单独的宏。我希望它看起来像这样

With Worksheets(1) 
 .Hyperlinks.Add Anchor:=.Range("B2"), _ 
 Address:=Macro Name, _ 
 ScreenTip:="", _ 
 TextToDisplay:= ""
End With 

还有更多内容,因为表格可能有更多行,因此超链接必须具有可变范围等,但我只是想知道它是否可行,因为我可以'让它按上述方式工作

1 个答案:

答案 0 :(得分:1)

有可能,但默认情况下不行。您将执行某种解决方法:

在例如连接到B2本身的单元格B2上创建超链接。

.Hyperlinks.Add Anchor:=Range("B2"), Address:="", SubAddress:=Range("B2").Address

然后使用Target决定应调用哪个宏,这样您就可以使用地址Target.Parent.Address或单元格值Target.Parent.Value来区分宏。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    'decide by address
    Select Case Target.Parent.Address
        Case "$B$2"
            CallMacro1
        Case "$B$3"
            CallMacro1
    End Select

    'or by intersection a range
    Select Case True
        Case Not Intersect(Target.Parent, Range("B4:B8")) Is Nothing
            CallMacro1
    End Select


    'or by value
    Select Case Target.Parent.Value
        Case 2
            CallMacro1
        Case 4
            CallMacro1
    End Select
End Sub

请注意,Call语句已弃用,不应再使用。只需使用宏名称本身来调用宏:而不是Call MacroName只需使用MacroName

或者使用ScreenTip作为解决方法来设置宏名称

.Hyperlinks.Add Anchor:=Range("B4"), Address:="", SubAddress:= _
    Range("B4").Address, ScreenTip:="MyMacro"

然后使用ScreenTip运行该宏

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Application.Run Target.ScreenTip
End Sub

请注意,MyMacro必须在模块中公开,否则您需要使用例如。 Sheet1.MyMacro告诉宏实际上是在哪个范围内。否则会抛出宏名称不存在的错误。

另请注意,这是一种解决方法,错过使用ScreenTip