2013-09-09 3 views
0

Я пытаюсь написать макрос для создания сводной диаграммы. В листе в столбце D у меня есть список пользователей. Одно имя пользователя может быть числом раз в столбце D. Я пытаюсь выяснить% от каждого имени пользователя из общего количества пользователейExcel VBA Сводная диаграмма

Мне нужно нарисовать диаграмму столбца пользователя с осью X и% по оси Y. Диаграмма должна начинаться после трех строк последней ячейки в столбце D. Количество строк в столбце D будет меняться каждый раз в зависимости от частоты выборки. Я пытаюсь это автоматизировать некоторые из результатов теста.

Код я попытался

lastTC = Range("D" & Rows.Count).End(xlUp).Row 
lastTCP = lastTC + 3 
lastTCP1 = lastTC + 10 
lastTCC = lastTC + 18 

lastTC = Range("D" & Rows.Count).End(xlUp).Row 
Range("D1", "D" & lastTC).Select 
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    ("TOPMEM!$D$1:$D" & lastTC), Version:=xlPivotTableVersion14).CreatePivotTable _ 
    TableDestination:=("TOPMEM!R1C10"), TableName:="PivotTable5", _ 
    DefaultVersion:=xlPivotTableVersion14 

Sheets("TOPMEM").Select 
Cells(724, 1).Select 
ActiveWorkbook.ShowPivotTableFieldList = True 
With ActiveSheet.PivotTables("PivotTable5").PivotFields("USER") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
ActiveSheet.PivotTables("PivotTable5").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable5").PivotFields("USER"), "Count of USER", xlCount 

Range("K1").Select 
With ActiveSheet.PivotTables("PivotTable9").PivotFields("Count of USER") 
    .Calculation = xlPercentOfTotal 
    .NumberFormat = "0.00%" 
End With 
ActiveWorkbook.ShowPivotTableFieldList = False 
+0

Какая у вас проблема. Разве это не компилируется? Не работать? Если это так, то какие проблемы вы пытаетесь решить? –

+0

Я получаю «Ошибка времени выполнения - 1004 Невозможно получить свойство сводной таблицы класса Worksheet». – user2761582

ответ

0

Ваше имя сводной таблицы должно быть неправильным. Щелкните правой кнопкой мыши на сводной таблице и выберите пункт «Параметры сводной таблицы» в контекстном меню. Проверьте имя сводной таблицы в верхней части всплывающего окна.

Кроме того, используйте такой код:

Sub test() 
    Dim p As PivotTable 
    Dim s As Worksheet 
    Set s = ThisWorkbook.Sheets("Sheet4") 
    Set p = s.PivotTables("PivotTable1") 
End Sub 

Это более надежный и простой в отладке. Если вы нажмете на другой лист во время работы макроса, он не сработает. С приведенным выше кодом этого не произойдет. Избегайте использования ActiveSheet и ActiveWorkbook в целом.