Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 创建一个新工作表并自动将事件插入其中_Vba_Excel_Events - Fatal编程技术网

Vba 创建一个新工作表并自动将事件插入其中

Vba 创建一个新工作表并自动将事件插入其中,vba,excel,events,Vba,Excel,Events,我有一个问题,如果我想做的事情是可能的 我有一个工作簿和一个宏,可以在工作簿中创建新的工作表。 但是我需要这些里面有事件的工作表(停用工作表) 示例:“我的宏”创建名为“资源1”、“资源2”、“资源3”的工作表(以后可以创建更多工作表)。此工作表中的每个工作表都有一个事件工作表和一行代码 也许你们有谁知道怎么做?如果可能的话 编辑: 正如rory所建议的,我曾尝试创建工作簿级别的事件,但它不起作用。在停用任何工作表(其中4个除外)时,我想隐藏其内容 “ThisWorkbook”模块中的我的代码:

我有一个问题,如果我想做的事情是可能的

我有一个工作簿和一个宏,可以在工作簿中创建新的工作表。 但是我需要这些里面有事件的工作表(停用工作表)

示例:“我的宏”创建名为“资源1”、“资源2”、“资源3”的工作表(以后可以创建更多工作表)。此工作表中的每个工作表都有一个事件工作表和一行代码

也许你们有谁知道怎么做?如果可能的话

编辑:

正如rory所建议的,我曾尝试创建工作簿级别的事件,但它不起作用。在停用任何工作表(其中4个除外)时,我想隐藏其内容

“ThisWorkbook”模块中的我的代码:

Public wsEvent As Worksheet

Private Sub Worksheet_Activate()
    If wsEvent.Name <> "General" And wsEvent.Name <> "Projects" <> wsEvent.Name <> "Resources" And wsEvent.Name <> "ResourcesProjects" Then
        Set wsEvent = ActiveSheet
    End If
End Sub

Private Sub Worksheet_Deactivate()
    If wsEvent.Name <> "General" And wsEvent.Name <> "Projects" <> wsEvent.Name <> "Resources" And wsEvent.Name <> "ResourcesProjects" Then
        wsEvent.Visible = xlSheetHidden
    End If
End Sub
Public wsEvent作为工作表
专用子工作表_Activate()
如果wsEvent.Name“General”和wsEvent.Name“Projects”wsEvent.Name“Resources”和wsEvent.Name“ResourcesProjects”,那么
设置wsEvent=ActiveSheet
如果结束
端接头
专用子工作表_Deactivate()
如果wsEvent.Name“General”和wsEvent.Name“Projects”wsEvent.Name“Resources”和wsEvent.Name“ResourcesProjects”,那么
wsEvent.Visible=xlSheetHidden
如果结束
端接头

我同意Rory和Doug的评论。虽然我倾向于Rory的,但实际上这是我通常使用的,需要维护的代码更少

这篇文章解释了你是如何实现你所需要的,搜索关键字“CreatinganEventProcedure”


我希望这能有所帮助:)

您在
本工作簿中需要的全部内容是:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Select Case LCase$(Sh.Name)
        Case "general", "projects", "resources", "resourcesprojects"
            ' skip
        Case Else
            Sh.Visible = xlSheetHidden
    End Select
End Sub

这是可能的,但我建议您使用已经包含代码的模板工作表并进行复制,或者使用工作簿级别的事件,该事件将触发书本中的所有工作表(如果需要排除一些,代码可以检查工作表的名称或属性。@Rory建议的工作簿级事件检查触发它的工作表是否以“资源”开头听起来是正确的方法。它将更容易维护。好主意,谢谢你,但我有一些麻烦。我编辑了我的问题并在那里添加了我的代码,也许有人能帮上忙?哦,它起作用了!再次感谢你:)我对事件无能为力,我必须了解更多:)