2

谁能明白为什么这段代码会在最后一行导致 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
4

2 回答 2

1

您收到错误是因为数据透视表位于 sheet2 而不是活动表上。您可以通过在选择数据透视表之前简单地选择 sheet2 来修复错误,但您真正想要做的是消除代码中的所有选择。有关更多解释/示例,请参阅避免使用 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

注意:我已经删除了不属于您的问题的变量和注释,以便更容易看到正在发生的事情。

于 2013-05-01T12:32:33.760 回答
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
于 2013-05-01T03:32:50.997 回答