将VBA子插入Excel工作表

时间:2015-01-01 01:08:12

标签: excel excel-vba vba

美好的一天,

我正在使用Excel 2013,我希望隐藏和取消隐藏我的表格,因为我与他们一起工作。我花了一些时间谷歌搜索并在论坛上发现大量关于将VBA添加到模块的古老帖子,但这不是我想要的。

在我花费大部分时间使用数据的主页上,我有一个按钮,显示一个UserForm,其中包含ListBox中的工作表列表。我从ListBox中选择Sheet,点击OK,然后运行以下命令:

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

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

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

如果有人可以让我知道如何让子程序将此代码插入我的工作表中,我将不胜感激。

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

1 个答案:

答案 0 :(得分:4)

不是在每个工作表中添加相同的代码,因为它们都在工作簿中,并且一旦工作簿中的任何工作表被停用,您实际上都在尝试执行隐藏,请将其放在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的概念,或者不要重复自己&#34;除非你喜欢WET,&#34; We Enjoy Typing&#34;。或者&#34;写两次&#34;。即使它只是以编程方式创建,当你可以让一段代码有一个作为工作表的传入参数时,你的所有工作表中都不应该存在一大块代码完全相同。

这样,如果您必须对其行为进行更改,则执行一次。它易于测试,并且可以在以后跟踪或修改。

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

此外,这可能就是为什么你没有找到任何结果将相同的代码插入到每张工作表中。这不是一个好习惯

Article on DRY