Создать сводную таблицу в заранее определенном месте - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать сводную таблицу и поместить ее в заранее определенное место (не новый лист).

Перед каждым запуском макроса удаляется сводная таблица, а также предварительно определенный лист.

Я заметил, что когда вы создаете таблицу вручную, имя таблицы увеличивается на единицу каждый раз (PivotTable2, PivotTable3 ...), что, как мне кажется, приводит к падению моего кода.

Я получаю сообщение об ошибке 5, недопустимый вызов процедуры или аргумент в этой строке:

ActiveWorkbook.PivotCaches.Create

Я проверил этот поток , который говорит, что вы можете полностью удалить параметр имени таблицы или переименовать его - однако я все еще получаю ошибки.

Мой код:

Sub CreatePivot()'
' CreatePivot Macro
'

' Set data as table
    Sheets("Filtered Flags").Select
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$G$16000"), , xlYes).Name _
        = "Table1"

' Create worksheet for pivot output
    Sheets.Add Before:=ActiveSheet
    ActiveSheet.Name = "Flag Pivot"

'Create Pivot Table
    Sheets("Filtered Flags").Select
    Range("Table1[[#Headers],[Order '#]]").Select
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Table1", Version:=6).CreatePivotTable TableDestination:="Flag Pivot!R3C1" _
        , TableName:="PivotTable5", DefaultVersion:=6
    Sheets("Flag Pivot").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable5").PivotFields("Material #")
        .Orientation = xlRowField
        .Position = 1
    End With

End Sub

1 Ответ

0 голосов
/ 26 апреля 2018

Так что здесь есть над чем поработать.Одна из основ, с которой нужно начать (и понять, почему построен мой пример ниже), состоит в том, чтобы узнать о , избегая использования Select и Activate.Кроме того, всегда с использованием Option Explicit поможет вам избежать многих проблем в именовании и использовании переменных.

Option Explicit

Public Sub CreatePivot()
    '--- establish some basic objects to use...
    Dim flagsWS As Worksheet
    Set flagsWS = ThisWorkbook.Sheets("Filtered Flags")

    '--- now, define the range of cells that contain the data
    '    and create the pivot cache
    With flagsWS
        Dim lastRow As Long
        Dim lastCol As Long
        Dim dataArea As Range
        Dim dataAreaString As String
        lastRow = .Cells(.Cells.rows.count, 1).End(xlUp).Row
        lastCol = .Cells(1, .Cells.Columns.count).End(xlToLeft).Column
        Set dataArea = .Range(.Cells(1, 1), .Cells(lastRow, lastCol))
        dataAreaString = .Name & "!" & dataArea.Address

        Dim pCache As PivotCache
        Set pCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                                                     SourceData:=dataAreaString)
    End With

    '--- create or clear the sheet for our new pivot
    Dim pivotWS As Worksheet
    On Error Resume Next
    Set pivotWS = ThisWorkbook.Sheets("Flag Pivot")
    On Error GoTo 0
    If Not pivotWS Is Nothing Then
        '--- delete everything on the worksheet so we're starting clean
        pivotWS.Cells.Clear
    Else
        Set pivotWS = ThisWorkbook.Sheets.Add
        pivotWS.Name = "Flag Pivot"
    End If

    '--- finally create the pivot table
    Dim flagPT As PivotTable
    Set flagPT = pivotWS.PivotTables.Add(PivotCache:=pCache, _
                                              TableDestination:=pivotWS.Range("A4"), _
                                              TableName:="AnnasPivotTable")

End Sub
...