2015-02-24 2 views
0

Я пытаюсь создать сводную таблицу. Используя функцию макроса записи, я создал небольшую сводную таблицу, однако, когда я пытаюсь настроить код из записанного макроса, я получаю сообщение об ошибке (Тип несоответствия).Excel с использованием PivotCaches.Create из записанного макроса

записанный макрос выглядит следующим образом:

Sheets.Add 
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     "tadasEquities_20150223133033!R1C1:R780C71", Version:=xlPivotTableVersion14). _ 
     CreatePivotTable TableDestination:="Sheet52!R3C1", TableName:= _ 
     "PivotTable32", DefaultVersion:=xlPivotTableVersion14 
    Sheets("Sheet52").Select 
    Cells(3, 1).Select 
    With ActiveSheet.PivotTables("PivotTable32").PivotFields("Research type") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 

Это часть кода, я настроить.

 Worksheets("Pivot Table").PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     rngData, Version:=xlPivotTableVersion14). _ 
     CreatePivotTable TableDestination:=Worksheets("Pivot Table").Cells(1, 1), TableName:= _ 
     "PivotTable", DefaultVersion:=xlPivotTableVersion14 

rngData определяются как:

Set wsData = Worksheets(1) 
Set rngData = wsData.Range(Worksheets(1).Cells(1, 1), Worksheets(1).Cells(downlast, rightlast)) 

Рабочего лист ("Сводная таблица") является

Worksheets.Add(After:=Worksheets(1)).Name = "Pivot Table" 

, где rightlast и downlast является последней клеткой таблицы.

Как вы можете видеть, я настраиваю только SourceData и TableDestination и использую Worksheets вместо ActiveWorkbook. Может ли кто-нибудь сказать мне, что я делаю неправильно?

ответ

0

Для SourceData и TableDestination я использовал следующие две строки. Теперь сводный стол работает хорошо.

dataSource = Worksheets(1).Name & "!" & Worksheets(1).Range(Cells(1, 1), Cells(downlast, rightlast)).Address(ReferenceStyle:=xlR1C1) 'Set the source data, you can make this dynamic if you want 
destination = Worksheets(2).Name & "!" & Worksheets(2).Range("A1").Address(ReferenceStyle:=xlR1C1) 
0

Вам необходимо пройти SourceData и TableDestination в String, как это:

Worksheets("Pivot Table").PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    rngdata.Address(, , xlR1C1, True), Version:=xlPivotTableVersion14). _ 
    CreatePivotTable TableDestination:=Worksheets("Pivot Table").Cells(1, 1) _ 
    .Address(, , xlR1C1, True), TableName:="PivotTable", _ 
    DefaultVersion:=xlPivotTableVersion14 

То, что вы сделали, вы передаете Range Object по обоим аргументам.
Мы просто использовали Range Object Address Property (который возвращает строку) с эталонным стилем, установленным на R1C1, а внешний - True, чтобы указать имя рабочего листа в адресе.
Это компилируется, но не проверяется. НТН.

+0

Спасибо за ваш ответ. Тем не менее, я все еще получаю сообщение об ошибке: Object не поддерживает это свойство или метод. Кроме того, [msdn.microsoft] (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pivotcaches.create%28v=office.14%29.aspx) говорит, что SourceData может быть объектом диапазона: аргумент SourceData требуется, если SourceType не является xlExternal. Это может быть объект Range (когда SourceType является либо xlConsolidation, либо xlDatabase), либо объектом Excel WorkbookConnection (когда SourceType является xlExternal). – tadalendas

+0

@Tadas Я только что просмотрел код, который вы опубликовали, который работает. В этом коде вы передали 'String' свои аргументы. что является единственной разницей в том, что вы пробовали (в котором вы передали объекты). – L42

Смежные вопросы