2017-11-08 4 views
1

나는 다음과 같은 코드는 어떻게 피벗 테이블 데이터 소스로 "미리 정의 된 범위"를 사용할 수 있습니다

Dim S As Range 

Set S = Range(Sheets(1).Cells(4, 2), Sheets(1).Cells(18, 9)) 

Sheets(4).PivotTables("PivotTable1").ChangePivotCache ThisWorkbook. _ 
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=S, Version:=xlpivotversion14) 

이 나에게 "잘못된 프로 시저 또는 인수가"오류를 제공을 가지고! 나는 다음과 같이 대신에 "S"의 범위를 사용할 때

그러나 :

Sheets(4).PivotTables("PivotTable1").ChangePivotCache ThisWorkbook. _ 
     PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     "C:\Users\Matt\Desktop\[FY19_Proposed_Sheet_V2.xlsm]Proposed Projects!R5C1:R29C18" _ 
     , Version:=xlPivotTableVersion14) 

을 나는 오류를 얻을!

적극적으로 변경하고 업데이트 할 수 있도록 "S"를 사용하고 싶습니다. 코드에서 지정된 고정 된 범위는 가설입니다.

감사합니다. 매트!

답변

0

Range을 참조하는 문자열을 SourceData으로 설정해야하기 때문입니다. 다음 작업을 수행 할 수 있습니다 :

Sub Test() 
Dim S As Range 

Dim shName as string 
Dim rngAddress as string 
Dim sourceDataStr as string 'Has to hold both sheetname and address. 

Set S = Range(Sheets(1).Cells(4, 2), Sheets(1).Cells(18, 9)) 

shName = Sheets(1).Name 'Capture sheet name of where the range is in your case 
rngAddress = S.Address 'Get the address for reference. 
sourceDataStr = shName & "!" & rngAddress 'Get the correct sourceData string 

Sheets(4).PivotTables("PivotTable1").ChangePivotCache ThisWorkbook. _ 
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sourceDataStr , Version:=xlpivotversion14) 'Tadaaaaa... 
End Sub 

최단 가능 코드는 아니지만 대부분의 최적화 코드는 아니지만 결국 샘플입니다.

+0

감사합니다. Rik,하지만 작동하지 않았습니다! "런타임 오류 '5': 잘못된 프로 시저 호출 또는 인수가 있습니다."... –

+0

PivotCaches.Create 메서드에서 version 매개 변수를 생략 해보십시오. 그 중 하나는 Excel 버전에만 해당됩니다. –

+0

아니요! 오류 메시지가 런타임 오류 '-2147024809 (80070057)로 변경되었습니다. –