早上好,
我一直致力于开发一个电子表格,该电子表格旨在为我的非技术同事尽可能自动化。
我遇到困难的一个功能是使用超链接“打开”和“关闭”隐藏的工作表。我们的想法是,只有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编辑器中创建了此代码以及gotoHidden
和closeHidden
的两个宏,并且“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也无效。但是,将我的两个宏(gotoHidden
和closeHidden
)添加到模块允许我从单个对象中调用它们,这使得事情变得更整洁,并可能帮助我将来整理我的代码。
答案 0 :(得分:0)
问题可能是由于您在Worksheets(sheetname).Visible = xlVeryHidden
过程中使用Activesheet而导致问题,而活动工作表是Sheet1而不是目标工作表。您需要使用{{1}}并根据活动单元格的行设置一些代码来设置变量sheetname。
答案 1 :(得分:0)
我曾尝试更新我的帖子,说我找到了解决方案,但显然没有保存更改。
与Jeeped评论的内容类似,我发现了Worksheet_FollowHyperlink
和Workbook_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
我不得不对我用于生成隐藏工作表上的超链接的代码进行一些调整,但现在正在使用。
感谢您的回复。