PivotTable error 1004
谁能看出为什么这段代码会在最后一行导致 1004 错误?一切都很好,直到最后一行。我让它工作了,然后它开始出现这个错误,我不知道为什么。 Sheet2 是一张空白纸。 Sheet1目前只是测试数据,10行3列。它从 B3 开始。有人有什么想法吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Sub CreatePivot() ' Define RngTarget and RngSource as Range type variables Dim RngTarget As Range Dim RngSource As Range Dim intLastCol As Integer Dim intCntrCol As Integer ' RngTarget is where the PivotTable will be created (ie: Sheet2, Cell B3) Set RngTarget = ThisWorkbook.Worksheets("Sheet2").Range("B3") ' RngSource defines the Range that will be used to create the PivotTable ' ActiveWorkbook = The currently opened Workbook ' ActiveSheet = The currectly opened sheet ' UsedRange = The Range of cells with active data in them Set RngSource = ActiveWorkbook.ActiveSheet.UsedRange ' Select the Range RngSource.Select ' Copy the Range into the clipboard RngSource.Copy ' Create a new PivotTable using the RngSource defined above, ' in Excel format, ' placed at the RngTarget location, ' And name it PivotB3 just for reference if needed ActiveWorkbook.PivotCaches.Create(xlDatabase, RngSource).CreatePivotTable RngTarget,"PivotB3" ' Get the last used column from the data table intLastCol = RngSource.Columns(RngSource.Columns.Count).Column ' Select the Pivot table so we can apply the conditional formats ActiveSheet.PivotTables("PivotB3").PivotSelect"", xlDataAndLabel, True |
您收到错误是因为数据透视表位于 sheet2 而不是 activesheet。您可以通过在选择数据透视表之前简单地选择 sheet2 来修复错误,但您真正想要做的是从代码中消除所有选择。请参阅避免使用 Select 以获得进一步的解释/示例。
试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Sub CreatePivot() Dim RngTarget As Range Dim RngSource As Range Dim ws As Worksheet Dim pt As PivotTable Set ws = ThisWorkbook.Sheets("Sheet2") ws.Cells.Clear ' RngTarget is where the PivotTable will be created (ie: Sheet2, Cell B3) Set RngTarget = ws.Range("B3") Set RngSource = ActiveWorkbook.ActiveSheet.UsedRange ' Create a new PivotTable ActiveWorkbook.PivotCaches.Create(xlDatabase, RngSource).CreatePivotTable _ RngTarget,"PivotB3" Set pt = RngTarget.PivotTable ' We now have access to the pivot table and can modify as needed pt.PivotSelect"", xlDataAndLabel, True 'ActiveSheet.PivotTables("PivotB3").PivotSelect"", xlDataAndLabel, True End Sub |
注意:我删除了不属于您的问题的变量和注释,以便更轻松地查看正在发生的事情。
试试下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | Sub CreatePivot() ' Define RngTarget and RngSource as Range type variables Dim RngTarget As Range Dim RngSource As Range Dim intLastCol As Integer Dim intCntrCol As Integer ' RngTarget is where the PivotTable will be created (ie: Sheet2, Cell B3) Set RngTarget = ThisWorkbook.Worksheets("Sheet2").Range("B3") ' RngSource defines the Range that will be used to create the PivotTable ' ActiveWorkbook = The currently opened Workbook ' ActiveSheet = The currectly opened sheet ' UsedRange = The Range of cells with active data in them Set RngSource = ActiveSheet.UsedRange ' Select the Range ' RngSource.Select ' Copy the Range into the clipboard ' RngSource.Copy ' Create a new PivotTable using the RngSource defined above, ' in Excel format, ' placed at the RngTarget location, ' And name it PivotB3 just for reference if needed Dim oPC As PivotCache Set oPC = ActiveWorkbook.PivotCaches.Create(xlDatabase, RngSource) Dim oPT As PivotTable Set oPT = oPC.CreatePivotTable(RngTarget,"PivotB3", True) ' Get the last used column from the data table intLastCol = RngSource.Columns(RngSource.Columns.Count).Column ' Select the Pivot table so we can apply the conditional formats 'Worksheets("Sheet2").PivotTables("PivotB3").PivotSelect"", xlDataAndLabel, True End Sub |