2014-10-07 57 views
0

我經常發現,使用數據透視表時,我最終得到了大量來自新工作表的工作表,這些工作表是通過數據透視表下鑽創建的。我認爲一個偉大的宏將是在透視表創建的所有新工作表的右上角顯示一個小的用戶窗體,允許用戶輕鬆刪除工作表並返回到數據透視表。但是,我無法弄清楚如何觸發宏。有任何想法嗎?基本上,只要在透視表中向下鑽取創建新工作表,就需要自動觸發宏。提示關閉來自數據透視表的新工作表

回答

0

隨着出已經變得複雜,你可能在尋找這樣的事情...

下 「的ThisWorkbook」 添加以下代碼:


EDITED

這是爲我工作:

Private Sub Workbook_NewSheet(ByVal Sh As Object) 
    If Detect_Pivot(Sh) Then 
     Sh.Activate 
     frmSheetOptions.Show 
    End If 
End Sub  

Function Detect_Pivot(wsNew As Worksheet) As Boolean 
    Dim wb As Workbook 
    Dim pvt As PivotTable 
    Dim bNew As Boolean 
    Dim i As Integer 

    i = 0 
    bNew = True 
    Set wb = ThisWorkbook 

    For Each pvt In wsNew.PivotTables 
     i = i + 1 
     s = Split(pvt.SourceData, "!") 
     sName = s(0) 
     If wsNew.Name = sName Then 
      bNew = False 
      Exit For 
     End If 
    Next 
    If i > 0 Then Detect_Pivot = bNew 
End Function 

要顯示FRM內部:

Private Sub cmdHide_Click() 
    frmSheetOptions.Hide 
End Sub 

Private Sub cmdDelete_Click() 
    ActiveSheet.Delete 
    frmSheetOptions.Hide 
End Sub 

Private Sub UserForm_Initialize() 
    frmSheetOptions.lblSheetName = ActiveSheet.Name 
End Sub 
+0

即使不是從數據透視表向下鑽取創建的,每次創建新形式時都不會觸發此代碼?有沒有什麼辦法可以讓數據透視表創建一張新表的事件觸發 – branden 2014-10-07 18:12:45

+0

它會 - 我編輯我的答案,包括一個函數「Detect_Pivot」它很簡單,似乎在測試後手動創建工作表,創建在同一張表上創建一個樞軸表,然後在新表上創建一個樞軸表。它可能無法完美地滿足您的需求,但如果工作表是從自動數據透視表創建生成的,我不知道您還有什麼可能學習。 – Archias 2014-10-07 18:39:43

+0

感謝您的迴應 - 非常有幫助!我現在要做的就是讓它適用於每個工作簿,而不是每次打開一個新文檔時都必須將它添加到「工作簿」中。有任何想法嗎? – branden 2014-10-08 19:19:48

0

要每次創建新的工作表開始的事件,你可以用下面的例子(蒂姆·威廉姆斯的答案)。但是,我不知道如何判斷新工作表是否是從數據透視表創建的。下鑽可能是由數據透視表觸發的事件,在這種情況下,也許您可​​以應用此方法來查找它。這將需要一些調查。

Private WithEvents app As Excel.Application 

Sub Init() 
    Set app = Application 'start capturing events 
End Sub 

Private Sub app_NewWorkbook(ByVal Wb As Workbook) 
    Debug.Print "New" 
End Sub 

Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) 
    Debug.Print "Before close: " & Wb.Name 
End Sub 

Private Sub app_WorkbookOpen(ByVal Wb As Workbook) 
    Debug.Print "Open: " & Wb.Name 
End Sub 
+0

有沒有什麼辦法可以讓數據透視表創建新表而不是創建任何表格 – branden 2014-10-07 18:13:11

+0

我發現了一個資源,建議檢查SheetType以查看它是否爲「顯示」。這會將用戶創建的工作表與由DrillDown等工具創建的工作表分開。 http://www.contextures.com/excel-pivot-table-drilldown.html – Alter 2014-10-07 18:24:12

+0

我強烈建議使用調試器來比較手動比較工作表和深入分析。您可能能夠發現除SheetType以外的其他差異。 – Alter 2014-10-07 18:26:47

相關問題