Generując tabelę przestawną z poziomu kodu pod Excelem 2003 można było jako argumentu Source metody tworzącej PivotCache podać dowolny poprawnie zdefiniowany obiekt Range, np CurrentRegion lub UsedRange. Podobnie rzecz ma się pod Excelem 2007/2019 (pamiętajmy tylko o użyciu metody PivotCaches.Create zamiast PivotCaches.Add). Niestety okazuje się, że w momencie gdy obiekt Range ma liczbę wierszy przekraczającą 65 536 (co teoretycznie nie powinno być problemem pod Excelem 2007/2010) metoda generuje błąd nr 13 Type mismatch 🙁 Rozwiązaniem (niezbyt eleganckim ale innego chyba nie ma) tego problemu jest użycie zamiast obiektu Range klasycznego stringa R1C1 z tymże zakresem:
Dim OstW As Long
Dim OstK As Long
Dim strZakres As String
Dim PC as PivotCache
OstW = Cells(ArkDane.Rows.Count, 1).End(xlUp).Row
OstK = Cells(1, ArkDane.Columns.Count).End(xlToLeft).Column
strZakres = "R1C1:R" & OstW & "C" & OstK
Set PC = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=strZakres, _
Version:=xlPivotTableVersion14) |
Dim OstW As Long
Dim OstK As Long
Dim strZakres As String
Dim PC as PivotCache
OstW = Cells(ArkDane.Rows.Count, 1).End(xlUp).Row
OstK = Cells(1, ArkDane.Columns.Count).End(xlToLeft).Column
strZakres = "R1C1:R" & OstW & "C" & OstK
Set PC = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=strZakres, _
Version:=xlPivotTableVersion14)
Przy okazji możemy zapoznać się z powszechnie znanymi wyrażeniami zwracającym nr ostatniego wiersza i ostatniej kolumny w zakresie danych
Przykład bazuje na stronie z MS Answers: 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