'FollowHyperlink'适用于所有工作表

时间:2015-11-20 10:20:23

标签: excel vba excel-vba

早上好,

我一直致力于开发一个电子表格,该电子表格旨在为我的非技术同事尽可能自动化。

我遇到困难的一个功能是使用超链接“打开”和“关闭”隐藏的工作表。我们的想法是,只有Sheet1对用户可见,直到他们点击'open'(Sheet1中的一个链接)运行我的宏gotoHidden(正常工作)并显示一个以行号命名的隐藏表单超链接是(听起来比它复杂,但这一部分正在运行)

当用户查看或编辑现在可见的隐藏工作表时,应单击“关闭”(隐藏工作表上的链接),该工作应运行我的宏closeHidden。如果我使用F8逐步执行closeHidden宏,它会按照我的预期执行,但是当点击链接时我无法运行它。

以下是我一直在使用的代码:

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    If Target.Name = "Open" Then
        gotoHidden
        Else
            If Target.Name = "Close" Then
                closeHidden
            End If
        Exit Sub
    End If
End Sub

我最初在Sheet1的VBA编辑器中创建了此代码以及gotoHiddencloseHidden的两个宏,并且“open”部分可以正常工作。

我已经尝试将所有代码移动到ThisWorkbook对象,认为这样可以从所有工作表中访问它,但这似乎不起作用。

如果我将以下代码添加到单个工作表中,我可以使用它:

Public Sub closeHidden()
    ActiveSheet.Visible = xlVeryHidden
    Sheets(1).Activate
End Sub

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    If Target.Name = "Close" Then
        closeHidden
    End If
    Exit Sub
End Sub

但是,单个工作表是由不同的宏(createNew)生成的,我不知道是否有办法在生成时自动将此代码添加到每个新工作表中。

我觉得我真的很接近解决这个问题,但是我看了很多不同的帖子并尝试了很多组合,我似乎无法自己到达那里。

有人能看到解决方案吗?

希望很明显我想要实现的目标,但如果需要请请澄清。

非常感谢提前。

更新:我刚刚尝试将代码添加到模块而不是Object也无效。但是,将我的两个宏(gotoHiddencloseHidden)添加到模块允许我从单个对象中调用它们,这使得事情变得更整洁,并可能帮助我将来整理我的代码。

2 个答案:

答案 0 :(得分:0)

问题可能是由于您在Worksheets(sheetname).Visible = xlVeryHidden过程中使用Activesheet而导致问题,而活动工作表是Sheet1而不是目标工作表。您需要使用{{1}}并根据活动单元格的行设置一些代码来设置变量sheetname。

答案 1 :(得分:0)

我曾尝试更新我的帖子,说我找到了解决方案,但显然没有保存更改。

与Jeeped评论的内容类似,我发现了Worksheet_FollowHyperlinkWorkbook_SheetFollowHyperlink之间的区别。

然后我可以在ThisWorkbook中使用以下代码:

Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Dim shName As String
Dim sheet As Worksheet
shName = ActiveCell.Row - 2
    If Target.Name = "Open" Then
        gotoHidden
        Else
            If Target.Name = "Close" Then
                closeHidden
            End If
        Exit Sub
    End If
End Sub

我不得不对我用于生成隐藏工作表上的超链接的代码进行一些调整,但现在正在使用。

感谢您的回复。