2012-10-08 7 views
1

아래 코드를 실행하면 불일치 오류 13이 발생합니다. 전체 코드 모듈이 사용 중이며 1 년 이상 대부분 변경되지 않았습니다. 최근에 아무것도 변경하지 않았으며이 통합 문서의 유일한 사용자입니다.PivotCaches.Add 불일치 오류 - 왜 이전에 발생하지 않았습니까?

비 작동 코드 :

Private Sub CreateMIAPivots(MIABook As Workbook, MIASheet As Worksheet, MaxRow As Long) 

Dim wksPivotSheet As Worksheet 
Dim PivotRange As Range 

    Set wksPivotSheet = MIABook.Sheets.Add 
    wksPivotSheet.Name = "Summary" 
    wksPivotSheet.Tab.Color = RGB(255, 0, 0) 

    Set PivotRange = MIASheet.Range("A1:Y" & MaxRow) 
    With MIABook.PivotCaches.Add(xlDatabase, PivotRange) 'Error sets here 
    'More code below 

MaxRow이 변수이지만, 나는 약 7,000 행으로 약 600 파일에 대해 그것을 확인했습니다, 그리고 Range 객체가 나는 경우 유효한 참조를하고있다 다른 방법으로 그것과 상호 작용하도록 노력하십시오.

나는 SO에 여기에 몇 가지 관련 질문 검토 :

해결 방법 코드 :

Private Sub CreateMIAPivots(MIABook As Workbook, MIASheet As Worksheet, MaxRow As Long) 

Dim wksPivotSheet As Worksheet 
Dim pc As PivotCache 
Dim lVBAVer As Long 
Dim PivotRange As Range 

    lVBAVer = CLng(Application.Version) 

    Set wksPivotSheet = MIABook.Sheets.Add 
    wksPivotSheet.Name = "Summary" 
    wksPivotSheet.Tab.Color = RGB(255, 0, 0) 

    Set PivotRange = MIASheet.Range("A1:Y" & MaxRow) 

    MIABook.Names.Add Name:="PivotRange", RefersTo:=PivotRange 

    'Using answer from https://stackoverflow.com/a/11868231/698590 (StackOverflow) 
    'as a guide for version checking. Original answer of 
    'CLng(Application.VBE.Version) did not work here. 
    #If lVBAVer <= 11 Then 
     Set pc = MIABook.PivotCaches.Add(xlDatabase, "PivotRange") 
    #Else 
     Set pc = MIABook.PivotCaches.Create(xlDatabase, "PivotRange") 
    #End If 
    With pc 
    'More code below 

내 질문은 지금 위의 솔루션이 필요합니까? 처음에는 내가 가진 것처럼 PivotCaches을 사용하는 동안 갑자기 멈추지 않는 코드를 완벽하게 작동시키는 사람은 내가 아닌 것 같습니다. 그래서 진짜 근본 원인은 무엇입니까? 무엇이 코드 작동을 멈추게 했습니까?

가능한 경우 미래의 예기치 않은 오류가 발생하지 않도록 예방하고 싶습니다. 그 답은 코드/워크 북 (여기서는 언급하지 않음)의 다른 곳에서했던 일에 놓여 있을지도 모른다는 것을 알고 있지만, 내가 변화 한 것을 추적 할 수는 없다.

답변

0

그래서 당신은 이미 문제가이 관련이 알고 : http://answers.microsoft.com/en-us/office/forum/office_2010-customize/pivotcache-type-mismatch-error-when-65536-rows/0827889e-b671-e011-8dfc-68b599b31bf5?msgId=4e3a2b20-7a72-e011-8dfc-68b599b31bf5

이유는 피벗 테이블의 VBA 구문/사용이 2003 년부터 2007/2010로 변경되었다 것으로 보인다. 코드의

MIABook.Names.Add Name:="PivotRange", RefersTo:=PivotRange 

이 섹션 :

#If lVBAVer <= 11 Then 
    Set pc = MIABook.PivotCaches.Add(xlDatabase, "PivotRange") 
#Else 
    Set pc = MIABook.PivotCaches.Create(xlDatabase, "PivotRange") 
#End If 

이 lVBAver보다 작은 있는지 확인하고 있습니다

는 그래서이와 통합 문서의 명명 된 범위를 설정하려면이 일반적인 구문을 사용 또는 11보다 작 으면 -이 구문을 사용합니다.

Set pc = MIABook.PivotCaches.Add(xlDatabase, "PivotRange") 

새 버전 인 경우 그것은이 구문을 사용합니다

Set pc = MIABook.PivotCaches.Create(xlDatabase, "PivotRange") 

때때로 당신은 그냥 마이크로 소프트가 완벽하지 않습니다 (웃음 아이러니) 및 그들은 단지 다른 모든 기업처럼 바보 같은 일을 할 것을 동의합니다. 그것은 어쨌든 내 이론입니다. 행운을 빕니다.

+0

@ stepan1010 답장을 보내 주셔서 감사합니다. 그러나 이것은 정확하게 제 문제는 아닙니다. 솔루션을 찾고있는 동안 프로그램 버전 확인을 보았습니다 만 Excel 2003 만 사용하고 있습니다. 나중에 업그레이드 할 수 있는지 직접 확인해 보았습니다.올바른 솔루션 인 것으로 보이는 것은 명명 된 범위입니다. 명명 된 범위가 작동하는 동안 범위를 직접 호출하면 (Sheet.Range ("A1")') 코드에 대한 명백한 변경없이 작업이 중단됩니다. – Gaffi

+0

정보 의이 비트가 전혀 도움이 될지 모르겠지만 내 이해는 문제는 단지 사용중인 Excel 버전 때문이 아니라 사용중인 VBA 버전 때문이었습니다. CLng (Application.Version)은 VBA 버전이 아니라 응용 프로그램 버전을 제공합니다. 그러나 문제는 응용 프로그램의 버전이 아닌 VBA 버전에만 해당 될 수 있다고 생각합니다. 이것은 적어도이 문제에서 Excel 2003을 사용하는 것에 관해서 나에게 이야기 한 내용에 근거한 나의 의구심입니다. 그래서 아마도 당신은 어떤 시점에서 어떤 버전의 VBA를 사용하고 있는지 알 수있을 것입니다. – Stepan1010

+0

Office 응용 프로그램을 업데이트하지 않고 VBE 버전을 어떻게 업데이트합니까? VBA7 버전 ('.Create')을 사용해도 PivotCaches의 유효한 멤버가 아니라는 오류가 발생합니다. 다시 말하지만, VBA6 구문 ('.Add')으로 작업 할 수있는 코드를 얻지 만, 전에는 할 필요가 없었지만 원하는 범위를 직접 참조하는 대신 명명 된 범위를 사용해야합니다. – Gaffi