2012-10-05 4 views
2

이전에 Visual Studio pkg의 일부로 사용했던 vb로 다시 작업 했었습니다. 새로운 작업으로 VBA의 일부로 작업하고 있습니다. 측면 프로젝트. 나는 멍청이 보트를 곧바로 밟았다 고 말하지 않겠지 만, 이전에 많이했던 것을 다시 배우고 있습니다. (언급하지 말아야 할 것은, VB를 배웠을 때 다루지 않은 특정 비트를 통합하는 것입니다. Visual Studio에서)Excel VBA : PivotCaches.Create Type 불일치

다른 프로젝트에서 vba를 통해 여러 피벗 테이블을 이미 만들었지 만 지금 당황한 특정 프로젝트가 있습니다.

VBA Excel 참조 서에 나열된 피벗 테이블 중 일부에 대한 코드를 재사용하고 있으며 지금까지 제대로 작동했습니다. 그러나이 특정 통합 문서에서는 몇 가지 변수를 전달하면서 함수를 호출하는 워크 시트에서 버튼을 누릅니다. 모든 것이 일반적으로 훌륭하고 멋쟁이이지만 캐시를 만들려고 할 때 불일치 오류가 있다는 오류 메시지가 나타납니다. 내 이해에서 피벗 캐시를 만들 때 문자열 및 변형을 소스 데이터로 전달할 수 있지만 이전에는 여러 번 코드를 반복했지만 지금까지는 문제가 없었습니다.


Private Function createPivotTable(ByRef sheetName As Variant, ByVal sheetNum As Integer) 

Dim DataRange As Range 
Dim pivotTableCache As PivotCache 
Dim pivotTableReport As PivotTable 

ActiveWorkbook.Worksheets("EXAMPLE SHEET").Activate 
Range("A1").Select 
Set DataRange = Selection.CurrentRegion 

Worksheets.Add.Name = sheetName 

Set pivotTableCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, _ 
     SourceData:=DataRange) 
Set pivotTableReport = pivotTableCache.createPivotTable(TableDestination:=ActiveWorkbook.Worksheets(sheetName).Range("A1"), _ 
TableName:="PVR") 

.... 

그래서 나는 기본적으로 붙어있어. 비슷한 문제를 춤추는 또 다른 스레드를 찾았습니다. here. 가장 높은 평가를받은 코멘트는 하나의 문제를 해결했습니다. 문자열로 범위 위치를 전달할 때 더 이상 불일치가 발생하지 않았지만 실제 테이블 자체를 만들려고 시도하면서 1004 오류가 계속 발생했습니다. 하나 이상의 데이터 행을 선택할 필요가 있습니다. (슬픈 듯이 충분히 해석 할 수 있습니다. 오류 코드에 대한 msgbox는 재미있는 하하의 선을 잘라냅니다.) 그러나 두 번 체크했는데, 선택은 실제로 전체 테이블 (6 개의 열 모두와 1000 개의 행)을 가져옵니다.

도움이 필요하거나 올바른 방향을 가리키면 감사하겠습니다.

* 확인하려면; 나는 사용자가 워크 시트의 이름을 묻는 입력 상자를 사용하기 때문에 sheetName을 변형하는 대신 문자열로 전달합니다. 그리고 실수로 입력 상자의 핸들을 치수 기입하여 실수로 취소했는지 확인할 수 있습니다. operation (공백 문자열 대신 false 값을 반환).

답변

2

범위가 식별되었지만 범위가 데이터가 포함 된 시트를 나타내지 않아 데이터를 찾지 못하는 것 같습니다. 시도해보십시오.

Private Function createPivotTable(ByRef sheetName As Variant, ByVal sheetNum As Integer) 

    Dim pivotTableCache As PivotCache 
    Dim pivotTableReport As PivotTable 

    Worksheets.Add.Name = sheetName 

    Set pivotTableCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, _ 
    SourceData:=Sheets("EXAMPLE SHEET").Range("A1").CurrentRegion) 
    Set pivotTableReport = pivotTableCache.createPivotTable(_ 
    TableDestination:=ActiveWorkbook.Worksheets(sheetName).Range("A1") _ 
    , TableName:="PVR") 

    ....