Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

Witam

Jako, że jestem mocno początkującym w wykorzystaniu języka VBA w pracy Excela, nie potrafię sobie poradzić z problemem.

Mam tabelę, w której codziennie będzie przybywało kilkadziesiąt rekordów. Z tej tabeli codziennie potrzebuję wyciągnąć kilka informacji, to będą stale te same informacje. Zasadne więc jest wykorzystanie tabeli przestawnej, ale chciałem uniknąć codziennego kilkukrotnego klikania w kreatorze tabeli przestawnej, aby te dane uzyskać. Zdobyłem kod automatyzujący tę czynność. Niestety mimokilkukrotnego sprawdzenia kodu wyskakuje mi komunikat jak w temacie. Nie wiem już co mam zrobić, aby usunąć problem. Może ktośmądrzejszy odemnie naprowadzi mnie na błąd ?. Poniżej problematyczny kod: Proszę o pomoc :)

Sub Odśwież()
Dim WSD As Worksheet
Dim WSD2 As Worksheet
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim PRange As Range
Dim FinalRow As Long
Dim FinalCol As Long
Set WSD = Worksheets("Arkusz3")
Set WSD2 = Worksheets("Zlecenia")

'Kasowanie poprzedniej tabeli przestanej

For Each PT In WSD.PivotTables
PT.TableRange2.Clear
Next PT

'Określanie zakresu danych w tabeli wyjściowej

FinalRow = WSD2.Cells(Rows.Count, 1).End(xlUp).Row
FinalCol = WSD.Cells(1, Columns.Count). _
End(xlToLeft).Column

Set PRange = WSD2.Cells(1, 1).Resize(FinalRow, FinalCol)
Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:= _
xlDatabase, SourceData:=PRange)

'Tworzenie tabeli przestawnej

Set PT = PTCache.CreatePivotTable(TableDestination:=WSD. _
Cells(4, 1), TableName:="Dane")

'Aktualizacja danych w tabeli

PT.ManualUpdate = True

'Określanie nagłówków w kolumnach i wierszach

PT.AddFields RowFields:=Array("Samochód"), _
ColumnFields:="Kierowca"

'Określanie wartości wyświetlanych w tabeli

With PT.PivotFields("Fracht")
.Orientation = xlDataField
.Function = xlSum
.Position = 1
End With

With PT.PivotFields("Data wyst")
.Orientation = xlPageField
.Position = 1
End With

'Obliczanie tabeli

PT.ManualUpdate = False

WSD.Activate
End Sub


Tutaj stale wyskakuje mi błąd - pogubiona linia kodu.

PT.AddFields RowFields:=Array("Samochód"), _
ColumnFields:="Kierowca"

Tak wygląda tabelka, dane są oczywiście zupełnie przypadkowe:
[img]
Obrazek
/img]
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

Witaj. Kod na pierwszy rzut oka wydaje się w porządku. Mam dwa strzały:
1. Nagłówki w tabeli zawierają niepotrzebne spacje na końcu np. "Samochód "
2. Nie pamietam czy podając Array (tablicę) nie musisz podać przynajmniej dwóch pól.

Jeżeli nie zadziała, wstaw proszę plik z fragmentem danych (mogą być te ze screenu).

Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

Dzięki Mariusz za błyskawiczną odpowiedź.

Kod na 100% jest poprawny, widziałem jak działa. W akuszu 3 pięknie powstaje tabela po naciśnięciu oczywiście przycisku " Odśwież". Niestety nie działa tylko u mnie na mojej tabeli. Jestem pewien, że nigdzie nie ma błędu typu, brak przecinka czy kropki itp.

Już spawdzam Twoje sugestie :)
Poniżej adres do pliku z problematyczną tabelką, przepraszam ale taki darmowy serwis wybrałem na szybko.

http://www.uploader.pl/file/292494/test.xlsm.html

Chodzi o spacje w kodzie? posprawdzałem ale dalej nie działa stale ten sam komunikat z numerem błędu 1004Ten post został edytowany przez Autora dnia 25.05.13 o godzinie 16:29
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

Zjadło Ci literkę 2 przy pobraniu ostatniej niepustej kolumny - pobieramy ją z ARKUSZ3, a dane mamy w ZLECENIA :-). W ten sposób tabela przestawna jest tworzona na podstawie jednej kolumny, dlatego nie widzi pól: SAMOCHÓD i KIEROWCA. Wszystko musimy pobrać z WSD2.

FinalCol = WSD2.Cells(1, Columns.Count). _
End(xlToLeft).Column

Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

Dziękuję Mariusz za pomoc :)

A ja szukałem błędu w przecinkach, kropkach, nawiasach:)
Wszystko działa pięknie :)

Dużo nauki przede mną

Pozdrawiam
Grzesiek Bienias

Grzesiek Bienias Opis w High
Definition i
dźwiękiem 7.1 :)

Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

Andrzej B.:
Witam

Jako, że jestem mocno początkującym w wykorzystaniu języka VBA w pracy Excela, nie potrafię sobie poradzić z problemem.

Mam tabelę, w której codziennie będzie przybywało kilkadziesiąt rekordów. Z tej tabeli codziennie potrzebuję wyciągnąć kilka informacji, to będą stale te same informacje. Zasadne więc jest wykorzystanie tabeli przestawnej, ale chciałem uniknąć codziennego kilkukrotnego klikania w kreatorze tabeli przestawnej, aby te dane uzyskać. Zdobyłem kod automatyzujący tę czynność. Niestety mimokilkukrotnego sprawdzenia kodu wyskakuje mi komunikat jak w temacie. Nie wiem już co mam zrobić, aby usunąć problem. Może ktośmądrzejszy odemnie naprowadzi mnie na błąd ?. Poniżej problematyczny kod: Proszę o pomoc :)
A ja mam inną poradę :)
Jeśli pivot jest ustawiony na stałe, do którego dodawane są tylko nowe dane (kolejne rekordy w tabeli z danymi) to może warto odpuścić sobie VBA i skorzystać z poniższego przepisu :)

1. stworzenie nazwy odnoszącej się do zakresu, jaki obejmuje tabela z danymi przy czym zakres niech opisuje formuła (założenie - tabela z danymi zaczyna się w komórce A1)
 = przesunięcie($A$1;0;0;ile.niepustych($A:$A); ile.niepustych($1:$1))

2. przypisanie źródła dla pivota powyższą nazwą zakresu.

Każdorazowe dopisanie nowych rekordów będzie wymagało tylko odświeżenia tabeli - formuła zadba o to, by zakres obejmował zawsze całą tabelę (niezależnie czy dojdą nowe rekordy, czy nowe kolumny).
Jacek Cetnarski

Jacek Cetnarski Data Analyst

Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

mozna jeszcze prosciej. Wystarczy zaznaczyc zakres wszystkich danych oraz Wstaw Tabele. Zakres powstalej tabeli bedzie sie sam aktualizowal po dodaniu kolejnych rekordow.

Temat: Metoda Add Fields z klasy PivotTable nie powiodła się

Witam

Owszem sugerowane pomysły pewnie się by sprawdziły, ale VBA daje mi możliwość błyskawicznego wstawienia innego zakresu danych. Wystarczy, że zamienię w procedurze nazwę kolumny, i mogę wyciągnąć inne lub dodatkowe dane. Poza tym wydaje mi się, że tak jak jest teraz jest elegancko z punktu widzenia estetyki, klikam w przycisk i automatycznie jestem przeniesiony na inny arkusz z opracowanymi danymi:).
Poza tym jestem na etapie uczenia się VBA, marzy mi się umiejętność sprawnego wykorzystania tego języka w pracy:), więc rozumiecie na dzień dzisiejszy jestem fanem VBA:)

Pozdrawiam

Następna dyskusja:

Jaka funkcja - wyrazy nie z...




Wyślij zaproszenie do