2016-08-05 1 views
1

У меня есть некоторые данные, которые являются источником для сводной таблицы, которую я создаю с помощью следующего сценария VBA.Создайте сводную таблицу на том же рабочем листе, что и исходные данные (Excel VBA)

Код создает новый лист и создает сводную таблицу, но я хочу, чтобы сводная таблица присутствовала на том же листе, где исходные данные.

Также необходимо проверить, где находятся существующие данные, и выбрать пустую ячейку.

Sub ApplyPivot() 

ActiveWorkbook.Sheets("NOIDA").Select 
Range("A1").Select 
Set objTable = Sheet1.PivotTableWizard 

Set objField = objTable.PivotFields("sector") 
objField.Orientation = xlRowField 

Set objField = objTable.PivotFields("number") 
objField.Orientation = xlColumnField 

Set objField = objTable.PivotFields("quantity") 
objField.Orientation = xlDataField 
objField.Function = xlCount 
objField.NumberFormat = " ######" 

End Sub 
+0

Это ваш цельный код? Над кодом не создается новый лист. Можете ли вы поделиться полным кодом? – Siva

ответ

1

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

Для того, чтобы удалить таблицу из исходных данных, она проверяет количество столбцов в исходных данных, а затем добавляет 2 столбца, т. Е. Будет находиться пустой столбец между исходными данными и сводной таблицей.

Option Explicit 

Sub ApplyPivotOnSameSheet() 

    Dim wsTarget As Worksheet 
    Dim rngData As Range 
    Dim rngPivotTarget As Range 
    Dim objCache As PivotCache 
    Dim objTable As PivotTable 
    Dim objField As PivotField 

    'create pivot table in code (no wizard) on same sheet 
    Set wsTarget = ThisWorkbook.Sheets("NOIDA") 
    'set range to build table from 
    Set rngData = wsTarget.Range("A1").CurrentRegion 
    'set range for left-hand corner of pivot clear of source data by 1 column 
    Set rngPivotTarget = wsTarget.Cells(1, rngData.Columns.Count + 2) 
    'create cache from data 
    Set objCache = ThisWorkbook.PivotCaches.Create(xlDatabase, rngData) 
    'create table from cache 
    Set objTable = objCache.CreatePivotTable(rngPivotTarget) 

    'your original code 
    Set objField = objTable.PivotFields("sector") 
    objField.Orientation = xlRowField 

    Set objField = objTable.PivotFields("number") 
    objField.Orientation = xlColumnField 

    Set objField = objTable.PivotFields("quantity") 
    objField.Orientation = xlDataField 
    objField.Function = xlCount 
    objField.NumberFormat = " ######" 

End Sub 
+0

** Спасибо, Робин Маккензи ** Ваш ответ помог. Это было именно то, что я искал. Еще раз спасибо !!! – techNikunj

+0

Без проблем - мое удовольствие –