将 VBA 子项插入 Excel 工作表

Insert VBA sub into Excel Worksheet

美好的一天,

我正在使用 Excel 2013,我想在使用它们时隐藏和取消隐藏我的 Sheet。我花了一些时间在谷歌上搜索,在论坛上发现了很多关于将 VBA 添加到模块的古老帖子,但这并不是我要找的。

在我大部分时间都在使用数据的主页上,我有一个按钮显示一个用户窗体,列表框中包含 sheets 的列表。我从 ListBox 中选择 Sheet,点击确定,它运行以下命令;

Private Sub OKButton_Click()  
    ThisWorkbook.Sheets(JobListBox.value).Visible = xlSheetVisible  
    ThisWorkbook.Sheets(JobListBox.value).Activate  
    Unload Me  
End Sub

我希望如此,当我通过 VBA 创建新的 sheet 时,我可以使用以下子例程填充 sheet;

Private Sub Worksheet_Deactivate()  
    Me.Visible = xlSheetVeryHidden  
End Sub

如果有人能让我知道如何制作一个子程序来将此代码插入我的 sheets,我将不胜感激。

PS:我的后备方法当然是手动复制/粘贴代码...但如果可能的话,我更愿意将其自动化。

不要向每个 sheet 添加相同的代码,因为它们都在工作簿中,并且一旦工作簿中的任何 sheet 被停用,您实际上是在尝试执行隐藏,把这个在 ThisWorkbook 的代码中。

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Sh.Visible = xlSheetVeryHidden
End Sub

您或许可以在您的项目类型中使用更多工作簿事件。

Here is a list of the workbook events

如果你想从这个中排除你的主页,你可以通过添加一个 IF 语句来修改它:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    IF Sh.Name <> "Main" Then
        Sh.Visible = xlSheetVeryHidden
    End If
End Sub

主要思路是,如果您必须将相同的代码放入多个对象中,更不用说所有对象了,您就是在重复自己。

查看 DRY 或 "Don't Repeat Yourself" 的概念,除非您喜欢 WET,"We Enjoy Typing"。或 "Write Everything Twice"。即使它只是以编程方式创建,当您可以让一段代码具有作为工作的传入参数时,您的所有 sheet 中也不必存在完全相同的代码块sheet。

这样,如果你必须改变它的行为,你只需要做一次。它很容易测试,以后跟踪或修改的次数也更少。

因此,如果您发现自己不得不一遍又一遍地使用相同的代码,请查看父对象并尝试找到一种方法将不断变化的对象或变量作为参数传递给一段单独的代码,或者模块。

此外,这可能就是为什么您没有找到任何结果的原因 将相同的代码插入每个 sheet。这不是一个好习惯

Article on DRY