如何在Visual Basic中添加超链接弹出菜单?

时间:2015-09-30 20:41:19

标签: excel vba popupmenu

如何让其中一个菜单项打开超链接?

例如,在菜单中选择按钮1时会打开“www.google.com”,按钮2会打开“www.yahoo.com”而不是测试宏。我尝试将.OnAction更改为.FollowHyperlink

我甚至试图在.OnAction部分输入超链接而没有运气。

有什么建议吗?

Option Explicit

Public Const Mname As String = "MyPopUpMenu"

Sub DeletePopUpMenu()
    ' Delete the popup menu if it already exists.
    On Error Resume Next
    Application.CommandBars(Mname).Delete
    On Error GoTo 0
End Sub

Sub CreateDisplayPopUpMenu()
    ' Delete any existing popup menu.
    Call DeletePopUpMenu

    ' Create the popup menu.
    Call Custom_PopUpMenu_1

    ' Display the popup menu.
    On Error Resume Next
    Application.CommandBars(Mname).ShowPopup
    On Error GoTo 0
End Sub

Sub Custom_PopUpMenu_1()
    Dim MenuItem As CommandBarPopup
    ' Add the popup menu.
    With Application.CommandBars.Add(Name:=Mname, Position:=msoBarPopup, _
         MenuBar:=False, Temporary:=True)

        ' First, add two buttons to the menu.
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Button 1"
            .FaceId = 71
            .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro"
        End With

        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Button 2"
            .FaceId = 72
            .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro"
        End With

        ' Next, add a menu that contains two buttons.
        Set MenuItem = .Controls.Add(Type:=msoControlPopup)
        With MenuItem
            .Caption = "My Special Menu"

            With .Controls.Add(Type:=msoControlButton)
                .Caption = "Button 1 in menu"
                .FaceId = 71
                .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro"
            End With

            With .Controls.Add(Type:=msoControlButton)
                .Caption = "Button 2 in menu"
                .FaceId = 72
                .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro"
            End With
        End With

        ' Finally, add a single button.
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Button 3"
            .FaceId = 73
            .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro"
        End With

    End With
End Sub

Sub TestMacro()
    MsgBox "Hi there!"
End Sub

3 个答案:

答案 0 :(得分:2)

你可以把

ThisWorkbook.FollowHyperlink "http://......"

在TestMacro中

答案 1 :(得分:1)

如果您要将此作为启动超链接的方法,请将参数添加到Testmacro子过程。

.OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro(1)"
...
.OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro(2)"
...
.OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro(3)"

实际的TestMacro子会设置Select Case statement来处理所有菜单命令。

Sub TestMacro(Optional iTYP As Long = 1)
    Select Case iTYP
        Case 1
            MsgBox "option 1"
            ActiveWorkbook.FollowHyperlink "http://www.google.com"
        Case 2
            MsgBox "option 2"
            ActiveWorkbook.FollowHyperlink "http://www.yahoo.com"
        Case 3
            MsgBox "option 3"
            ActiveWorkbook.FollowHyperlink "http://www.bing.com"
        Case Else
            ActiveWorkbook.FollowHyperlink "http://stackoverflow.com"
    End Select
End Sub

答案 2 :(得分:1)

与Bas回答一样,你可以设置你的TestMacro有一个url的输入字符串,然后在调用它时传递它

' Finally, add a single button.
    With .Controls.Add(Type:=msoControlButton)
        .Caption = "Button 3"
        .FaceId = 73
        .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro(" & Chr(34) & "http://www.google.com" & Chr(34) & ")"
    End With



Sub TestMacro(url As String)
    ThisWorkbook.FollowHyperlink url
End Sub