模块级VBA跟随超链接

模块级VBA跟随超链接,vba,excel,Vba,Excel,我需要有一个简单的超链接(在任何工作表上),当单击它时会显示一条消息。在模块中放置此代码是必需的,因此不能使用适用的工作表或工作簿 当代码出现在任何适用的工作表中时,它会起作用: Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Msgbox "It works!" End Sub 当代码在此工作簿中时-它可以工作: Sub Workbook_SheetFollowHyperlink(ByVal Sh As Obj

我需要有一个简单的超链接(在任何工作表上),当单击它时会显示一条消息。在模块中放置此代码是必需的,因此不能使用适用的工作表或工作簿

当代码出现在任何适用的工作表中时,它会起作用:

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)  
    Msgbox "It works!"  
End Sub
当代码在此工作簿中时-它可以工作:

Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)  
    MsgBox "It Works!"  
End Sub
我在一个模块中尝试了以下方法-无效:


有什么建议吗?感谢您帮助新手解决问题。

您可以使用工作表级代码捕获事件,并让该子模块调用模块级子模块来执行大部分处理


这种方法的优点是,您不必为每张工作表维护多个编码副本。

假设您的Bas文件如下所示

先决条件:

  • 设置对VBA扩展性库的引用。在VBA编辑器中,转到“工具”菜单,选择“引用”,然后选择Microsoft Visual Basic For Applications Extensibility 5.3

  • 您需要启用对VBA项目的编程访问。开发者工具栏|代码面板中的宏安全项。在该对话框中,选择“宏设置”,然后检查对VBA项目对象模型的信任访问

  • 代码:在模块中

    Sub Sample()
        Dim MyBasFile As String
        Dim MyData As String, strData() As String
    
        Dim VBProj As VBIDE.VBProject
        Dim VBComp As VBIDE.VBComponent
        Dim CodeMod As VBIDE.CodeModule
        Dim LineNum As Long, i As Long
    
        '~~> path to your Bas File
        MyBasFile = "D:\Users\SidzPc\Desktop\Sample.Bas"
    
        '~~. Open Bas File as text and read it in one go into memory
        Open MyBasFile For Binary As #1
        MyData = Space$(LOF(1))
        Get #1, , MyData
        Close #1
        '~~> Store the conteents in array
        strData() = Split(MyData, vbCrLf)
    
        '~~> Define Destination - Thisworkbook
        Set VBProj = ActiveWorkbook.VBProject
        Set VBComp = VBProj.VBComponents("ThisWorkbook")
        Set CodeMod = VBComp.CodeModule
    
        With CodeMod
            LineNum = 1
            '~~> Loop Through array and write to thisworkbook code area
            For i = 1 To UBound(strData) - 1
                Debug.Print strData(i)
                .InsertLines LineNum, strData(i)
                LineNum = LineNum + 1
            Next i
        End With
    End Sub
    
    运行上述代码时输出

    Sub Sample()
        Dim MyBasFile As String
        Dim MyData As String, strData() As String
    
        Dim VBProj As VBIDE.VBProject
        Dim VBComp As VBIDE.VBComponent
        Dim CodeMod As VBIDE.CodeModule
        Dim LineNum As Long, i As Long
    
        '~~> path to your Bas File
        MyBasFile = "D:\Users\SidzPc\Desktop\Sample.Bas"
    
        '~~. Open Bas File as text and read it in one go into memory
        Open MyBasFile For Binary As #1
        MyData = Space$(LOF(1))
        Get #1, , MyData
        Close #1
        '~~> Store the conteents in array
        strData() = Split(MyData, vbCrLf)
    
        '~~> Define Destination - Thisworkbook
        Set VBProj = ActiveWorkbook.VBProject
        Set VBComp = VBProj.VBComponents("ThisWorkbook")
        Set CodeMod = VBComp.CodeModule
    
        With CodeMod
            LineNum = 1
            '~~> Loop Through array and write to thisworkbook code area
            For i = 1 To UBound(strData) - 1
                Debug.Print strData(i)
                .InsertLines LineNum, strData(i)
                LineNum = LineNum + 1
            Next i
        End With
    End Sub
    

    为什么不希望它出现在工作表代码are或thisworkbook代码区域?我正在通过编程从save.BAS文件插入一个模块,这将在许多工作簿中发生。抱歉,我无法以这种方式将代码插入工作表级或工作簿级代码。
    我无法以这种方式插入代码
    为什么?你面临什么问题?您始终可以从tha bas文件中读取数据并将其插入
    ThisWorkbook
    code区域。Siddarth,我正在使用此处演示的代码[link],但我不确定如何按照您的建议将其插入ThisWorkbook代码区域。好的,请稍候。。。发布答案。
    这种方法的优点是…
    Gary,我想到了这一点,但是你可以使用
    Application\u SheetFollowHyperlink
    :)然后在OP的帖子下面提出我的问题。奇妙的解决方案。谢谢