2015-11-27 44 views
1

我有一個問題,如果我想要做的事情是可能的。創建一個新的工作表並自動插入一個事件

我有一個工作簿和一個在該工作簿中創建新工作表的宏。 但我需要這些工作表內的事件(停用工作表)。

示例:我的宏創建名爲「Resources_1」,「Resources_2」,「Resources_3」的工作表(並且可以在稍後創建更多工作表)。每個工作表都有一個事件Worksheet_Deactivate和一行代碼。

也許你們中的任何人都有一個想法如何做到這一點?如果有可能做到?

編輯:

正如羅裏建議,我試圖做一個工作簿級事件,但它不工作。關閉任何工作表(除了其中的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 
+4

這是可能的,但我會建議,而不是您使用已在代碼中有一個模板片和複製,或使用一個工作簿級別的事件,而不是將被觸發中的所有表書(如果喲你需要排除幾個,你的代碼可以檢查名單或工作表的屬性。 – Rory

+1

@ Rory建議的一個工作簿級別的事件,檢查觸發它的工作表是否以「資源」開頭,聽起來像是正確的方法。維護起來會容易得多。 –

+0

不錯的主意,謝謝你,但我有一些麻煩。我編輯了我的問題,並在那裏添加了我的代碼,也許有人可以幫忙? – GohanP

回答

1

所有您在ThisWorkbook模塊中需要的是有這樣的:

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 
+0

哦,它的工作原理!再次感謝你:)我對事件微弱,我必須瞭解更多信息:) – GohanP

1

我與羅裏和Doug的意見達成一致。雖然我傾向於實際使用Rory,但我通常使用的是較少的代碼來維護。

本文從http://www.cpearson.com/excel/vbe.aspx解釋喲如何實現你需要什麼,搜索關鍵字「創建一個事件過程」​​

我希望這有助於:)

+0

謝謝,我會從中學習:) – GohanP

相關問題