2013-03-16 7 views
0

Я пытаюсь использовать этот макрос для создания этой сводной таблицы каждый день с тем же именем листа. Единственное, что изменится, это строка источника данных, так как я никогда не знаю, сколько строк она будет. Я попытался установить всю строку в переменную CurSourceData, а затем просто использовать ее, но она терпит неудачу и говорит недействительный аргумент arg.Сводная таблица через VBA

Любые идеи были бы полезны.

Sheets("Cases 23+ Day (Due Today)").Select 
Range("A1").Select 
Selection.End(xlDown).Select 
    Selection.End(xlDown).Select 
CurRow = ActiveCell.Row 
CurSourceData = "Cases 23+ Day (Due today)!R1C2:R" & CurRow & "C20" 
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    CurSourceData, Version:=xlPivotTableVersion14). _ 
    CreatePivotTable TableDestination:="Master Summary!R3C7", TableName:= _ 
    "PivotTable3", DefaultVersion:=xlPivotTableVersion14 
Sheets("Master Summary").Select 
Cells(3, 7).Select 
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable3").PivotFields("Status"), "Count of Status", xlCount 
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Status") 
    .Orientation = xlRowField 
    .Position = 1 
End With 

ответ

1

Аргумент SourceData PivotCaches.Create является либо диапазоном, либо соединением. Я думаю, что есть проблема с пространством в имени вашего листа, и ответ заключается в использовании одинарных кавычек. Попробуйте:

Set CurSourceData = Worksheets("Cases 23+ Day (Due today)").Range("B1", "T" & CurRow)

(я ненавижу R1C1 обозначения и не мог понять, как использовать его здесь.)

+0

Я ценю ответ. Я попытался изменить это, и это не помогло. Любые другие идеи? В добавлении, если я действительно использую правильную правильную информацию с «" по мере необходимости, она ошибается при выборе основного резюме тоже? – MBlackburn

+0

@ user1243498 ответить обновлено – grahamj42

0

Это работает для меня, предполагая, что ваш набор данных начинается в ячейке A1:

Dim MyRange As Range 

Dim lrow As Long 

Dim lcol As Long 

lrow = ActiveSheet.Cells(Application.Rows.Count, 1).End(xlUp).Row 

lcol = ActiveSheet.Cells(1, Application.Columns.Count).End(xlToLeft).Column 

Set MyRange = ActiveSheet.Cells(1, 1).Resize(lrow, lcol) 

Удачи вам!