任何人都可以看到为什么这段代码会在最后一行导致1004错误?一切都很好,直到最后一行。我有它工作,然后它开始得到这个错误,我无法弄清楚为什么。 Sheet2是一张白纸。 Sheet1目前只是测试数据,10行,3列。它从B3开始。有人有什么想法吗?
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
答案 0 :(得分:1)
您收到错误,因为数据透视表位于sheet2而不是活动表。您可以在选择数据透视表之前简单地选择sheet2来修复错误,但您真正想要做的是消除代码中的所有选择。有关详细说明/示例,请参阅Avoid Using Select。
试试这个:
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 :(得分:0)
尝试以下代码:
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