2017-11-12 1 views
0

내가 동적 범위를 사용하여 newsheet에 피벗 테이블을 만들려고하지만라는 오류가 점점 오전 만들 때 :유형 불일치 오류 발생 PivotCache

Run time error: 13 Type Mismatch

오류를 봤 내 이해에 따라 코드를 엑셀 2016

Sub EEE() 

Dim PrevSheet As Worksheet 
Set PrevSheet = ActiveSheet 

Sheets.Add.Name = "Pivottable" 
PrevSheet.Select 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ 
            SourceData:=ActiveSheet.UsedRange, _ 
            Version:=xlPivotTableVersion15).CreatePivotTable _ 
            TableDestination:="Pivottable!R3C1", _ 
            TableName:="PivotTable1", _ 
            DefaultVersion:=xlPivotTableVersion15 

Sheets("Pivottable").Select 
Cells(3, 1).Select 

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Faculty") 
.Orientation = xlRowField 
.Position = 1 
End With 

With ActiveSheet.PivotTables("PivotTable1").PivotFields("NPS") 
.Orientation = xlColumnField 
.Position = 1 
End With   
End Sub 

M을 사용하여

: 오류입니다 정확하게 일치하지 않는 데이터 유형을 포함,하지만 난 알아낼 수 아니다 odified 코드 - 작동

Sub EEE() 

    Dim rng  As Range 
    Dim pc  As PivotCache 
    Dim pt  As PivotTable 
    Dim ws  As Worksheet 

    Set rng = ActiveSheet.Range("A1").CurrentRegion 

    Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabaseSourceData:=rng.Address) 
    Set ws = ActiveWorkbook.Worksheets.Add 
    ws.Name = "NewSheet" 
    Set pt = pc.CreatePivotTable(TableDestination:=Range("A3"),TableName:="pvttbl") 

    With pt 
    .PivotFields("Faculty").Orientation = xlRowField 

     ActiveSheet.PivotTables("pvttbl").AddDataField ActiveSheet.PivotTable "pvttbl").PivotFields("NPS"), "Count of NPS", xlCount 

    .PivotFields("NPS").Orientation = xlColumnField 
    End With 
End Sub 
+0

하는 줄에 오류가 발생합니까? F8을 사용하여 코드를 단계별 실행하고 오류가 발생하면 강조 표시되는 행을 확인하십시오. – QHarr

+0

또한 가능한 경우 Activesheet를 피하고 이름과 워크 시트 모음으로 시트를 참조하십시오. 사용을 피하고 가능하면 선택하고 With 문을 사용하십시오 – QHarr

+0

전체 "ActiveWorkbook.PivotCaches.Create ...."가 강조 표시됩니다 – Hadan

답변

3

어떤 줄에서 오류가 발생하는지는 알 수 없습니다. 그러나 몇 가지 가능한 범인이 있습니다. SourceData:=ActiveSheet.UsedRange 줄에 "안녕하세요, 피벗 테이블을 만들 어서 활성 시트에서 찾으십시오."라고 말합니다. 별로 좋은 생각이 아닙니다. 데이터가있는 정확한 범위를 사용하십시오. 데이터 블록이있는 셀을 선택하고 CurrentRegion을 사용하십시오.

더 나은
SourceData:= Activesheet.Range("A1").CurrentRegion 

... 나, 엑셀 표 이전 코드에서 일명 ListObject로 SourceData 턴, 참조 그 ListObject :

SourceData:= "Table1" 

당신이 실행하려고하면 귀하의 코드는 실패합니다 그것은 한 번 이상이고 당신은 지난 번에 만든 "피벗 테이블 (PivotTable)"이라는 시트를 삭제하지 않았습니다. 여기

내가 이것을 코딩 할 방법은 다음과 같습니다

Option Explicit 

Sub EEE() 

Dim rng  As Range 
Dim pc  As PivotCache 
Dim pt  As PivotTable 
Dim pf  As PivotField 
Dim ws  As Worksheet 

Set rng = Range("A1").CurrentRegion '<- Change to the address of the top left cell in your data. 

Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rng.Address) 
Set ws = ActiveWorkbook.Worksheets.Add 
Set pt = pc.CreatePivotTable(TableDestination:=Range("A1")) 

With pt 
    .PivotFields("Faculty").Orientation = xlRowField 
    .PivotFields("NPS").Orientation = xlColumnField 
End With 


End Sub