2016-07-12 4 views
0

Я пытаюсь создать сводную таблицу с помощью vba. Ниже приведен код, который я пробовал:Создание сводной таблицы с использованием vba - ошибка времени выполнения

Sub CreatePivot() 

    Dim objTable As PivotTable 
    Dim objField As PivotField 
    Dim ws As Worksheet 

    Set ws = Worksheets.Add 
    Sheets(ws.Name).Name = "Write-Off Pivot" 

    ' Select the sheet and first cell of the table that contains the data. 
    ActiveWorkbook.Sheets("GEP Write-Offs Rawdata").Select 
    Range("A1").Select 

    Set objTable = ws.PivotTableWizard 

    ' Specify row and column fields. 
    Set objField = objTable.PivotFields("MPG") 
    objField.Orientation = xlRowField 

    ' Specify a data field with its summary 
    ' function and format. 
    Set objField = objTable.PivotFields("'A_780610 - Inventory - Obsolescence") 
    objField.Orientation = xlDataField 
    objField.Function = xlSum 
    objField.NumberFormat = "$ #,##0" 


End Sub 

Я получаю это сообщение об ошибке. «Ошибка времени выполнения„104“» «метод„PivotTables“объекта" _worksheet»Ошибка

Проблема, кажется, в этой строке, но не в состоянии понять, что вызывает его.

Set objTable = ws.PivotTableWizard 
+1

Вам, кажется, не хватает некоторых аргументов. Посмотрите официальную документацию, чтобы узнать, приближается ли она: https://msdn.microsoft.com/en-us/library/office/ff839228.aspx – sous2817

+0

@Yuvaraj Я отправил свой ответ после проверки по данным теста с Excel 2016 и желающим получать отзывы от активного члена, подобного вам. Это, конечно, не для точек ответа, а для улучшения нашего опыта обучения, поскольку это никогда не заканчивается. – skkakkar

+0

Ваше быстрое действие приветствуется. Спасибо – skkakkar

ответ

1

Ваша следующая строка требует изменений

Set objTable = ws.PivotTableWizard 

Этот должен указывать на лист источника данных. Таким образом, это должно быть.

Set objTable = Sheets("GEP Write-Offs Rawdata").PivotTableWizard 

Это сделает сводную таблицу и записать в новый добавлен лист с момента команды

Set ws = Worksheets.Add 
    Sheets(ws.Name).Name = "Write-Off Pivot" 

не связан с it.May пожалуйста, изменить его соответствующим образом.

Это в дополнение к тому, что предложил @Rory.

+0

@Rory Я нахожу мужество просить вашу точку зрения на изменения, предложенные мной в отношении Set objTable. Поскольку я на начальном уровне в excel-vba и хочу учиться, я не буду колебаться в отзыве своего ответа, если это не имеет значения или неверно. – skkakkar

0

Вы должны использовать Используйте ActiveSheet.Pivottablewizard, а не ws.PivotTableWizard поскольку нет каких-либо данных о ws листе.

Кстати, это излишне запутанным:

Sheets(ws.Name).Name = "Write-Off Pivot" 

Все, что вам нужно:

ws.Name = "Write-Off Pivot" 
0

Методы PivotTableWizard необходим некоторые параметры:

Как это:

Set objTable = ws.PivotTableWizard(xlDatabase, ActiveWorkbook.Worksheets("Table8").Range("A1:A5"), ws.Range("A1:A6")) 

Есть много параметров, для вашего примера мне нужен тип источника данных, источник данных и источник данных.

Вы видите все параметры, если вы просто открыть "(" после того, как es.PivotTableWizard или вы можете получить их здесь:.

https://msdn.microsoft.com/de-de/library/office/ff839228.aspx

+0

На самом деле это не нужно * никому из них. – Rory