我經常發現,使用數據透視表時,我最終得到了大量來自新工作表的工作表,這些工作表是通過數據透視表下鑽創建的。我認爲一個偉大的宏將是在透視表創建的所有新工作表的右上角顯示一個小的用戶窗體,允許用戶輕鬆刪除工作表並返回到數據透視表。但是,我無法弄清楚如何觸發宏。有任何想法嗎?基本上,只要在透視表中向下鑽取創建新工作表,就需要自動觸發宏。提示關閉來自數據透視表的新工作表
回答
隨着出已經變得複雜,你可能在尋找這樣的事情...
下 「的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
要每次創建新的工作表開始的事件,你可以用下面的例子(蒂姆·威廉姆斯的答案)。但是,我不知道如何判斷新工作表是否是從數據透視表創建的。下鑽可能是由數據透視表觸發的事件,在這種情況下,也許您可以應用此方法來查找它。這將需要一些調查。
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
有沒有什麼辦法可以讓數據透視表創建新表而不是創建任何表格 – branden 2014-10-07 18:13:11
我發現了一個資源,建議檢查SheetType以查看它是否爲「顯示」。這會將用戶創建的工作表與由DrillDown等工具創建的工作表分開。 http://www.contextures.com/excel-pivot-table-drilldown.html – Alter 2014-10-07 18:24:12
我強烈建議使用調試器來比較手動比較工作表和深入分析。您可能能夠發現除SheetType以外的其他差異。 – Alter 2014-10-07 18:26:47
- 1. 數據透視表提示重複值
- 2. 使用來自89個工作簿(Excel VBA)的數據的數據透視表
- 3. 創建數據透視表不工作
- 4. 數據透視表按預期工作
- 5. 在工作簿中的新工作表上創建熊貓數據透視表
- 6. 刷新數據透視表
- 7. 更新數據透視表
- 8. D3關閉圖表的工具提示
- 9. 來自多個電子表格的數據透視表
- 10. 受保護的工作表刷新表(不是數據透視表)
- 11. 來自數據列對的數據透視表
- 12. 複製來自不同工作簿的數據並刷新數據透視表EXCEL VBA
- 13. 與數據透視表的關係
- 14. 找出數據透視表的來源
- 15. Laravel的數據透視表+一般的數據透視表
- 16. 無法獲得工作表類的數據透視表屬性
- 17. 隱藏數據透視表中的數據透視表項
- 18. 數據未從2個表+ 1的數據透視表進來laravel關係
- 19. 來自同一來源的數據顯示在數據透視表頭中,但不顯示在數據透視表模板中
- 20. 透視表數據
- 21. 關閉Excel數據透視表小計VB.NET
- 22. 更新的數據透視表
- 23. 顯示值的Excel數據透視表
- 24. 無法在VBA中的新工作表中創建數據透視表
- 25. Excel的VBA來過濾數據透視表和數據透視表的前一天 - 透視過濾器字段
- 26. Laravel - 獲取數據透視表關係
- 27. 使用數據透視表來表示對象數據的陣列
- 28. 將數據透視表添加到現有工作表
- 29. C#:Excel工作表到數據透視表使用Open XML?
- 30. 數據透視表與數據透視表高速緩存
即使不是從數據透視表向下鑽取創建的,每次創建新形式時都不會觸發此代碼?有沒有什麼辦法可以讓數據透視表創建一張新表的事件觸發 – branden 2014-10-07 18:12:45
它會 - 我編輯我的答案,包括一個函數「Detect_Pivot」它很簡單,似乎在測試後手動創建工作表,創建在同一張表上創建一個樞軸表,然後在新表上創建一個樞軸表。它可能無法完美地滿足您的需求,但如果工作表是從自動數據透視表創建生成的,我不知道您還有什麼可能學習。 – Archias 2014-10-07 18:39:43
感謝您的迴應 - 非常有幫助!我現在要做的就是讓它適用於每個工作簿,而不是每次打開一個新文檔時都必須將它添加到「工作簿」中。有任何想法嗎? – branden 2014-10-08 19:19:48