• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA maken draaitabel en oude verwijderen

Status
Niet open voor verdere reacties.

MHUCrew

Gebruiker
Lid geworden
20 sep 2019
Berichten
5
Hoi allemaal,

Via VBA wil ik graag een macro gebruiken om een draaitabel te maken of updaten.
Tot nu toe ben ik zo ver dat hij apart van elkaar een oude draaitabel verwijderd en ook een nieuwe kan maken.
Ik krijg ze alleen niet samen in een macro. Ik krijg steeds foutmelding 91 tijdens het uitvoeren (Objectvariabele of blokvariabele With is niet ingesteld).
De volgende code heb ik gebruikt (grote delen zijn van internet gehaald), de foutmelding komt bij het dik gedrukte deel te staan:

Sub Draaitabel()

'Declare Variables
Dim WB As Workbook
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim LastRow As Long
Dim LastCol As Long

Set PSheet = Worksheets("PivotTable")
Set DSheet = Worksheets("Data")
Set WB = ThisWorkbook

For Each PSheet In ActiveWorkbook.Worksheets
For Each PTable In PSheet.PivotTables
PTable.TableRange2.Clear
Next PTable
Next PSheet

'Define Data Range
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

'Define Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange)

Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="Tabel")


'PSheet.Range("A1"), TableName:="Tabel")

With PTable
With .PivotFields("Year")
.Orientation = xlRowField
.Position = 1
End With

With .PivotFields("Month")
.Orientation = xlRowField
.Position = 2
End With

'Insert Column Fields
With .PivotFields("Zone")
.Orientation = xlColumnField
.Position = 1
End With
'Insert Data Field
With .PivotFields("Amount")
.Orientation = xlDataField
.Position = 1
.Function = xlSum
.NumberFormat = "#,##0"
.Name = "Revenue "
End With
End With

End Sub


Wie kan en wil mij helpen?

Met vriendelijke groet,
Martijn
 
Kan dat ook wanneer het databereik variabel is? Het zijn boekingen van een administratie die per dag meer kunnen worden.
 
Binnengekomen bij Beheer: Het probleem is nog niet verholpen, dus ik sta nog open voor reacties.
 
Heeft beheer TS gevraagd

- code tags te gebruiken
- een voorbeeldbestand te plaatsen
- ergo: de forumregels te lezen

?
 
Heeft beheer TS gevraagd

- code tags te gebruiken
- een voorbeeldbestand te plaatsen
- ergo: de forumregels te lezen

?

Kan ik zelf de codetags toevoegen?
Ik ben compleet nieuw hier.
 
Waarom wil je steeds een nieuwe?

Bijwerken kan met vernieuwen of:

Code:
sub draaitabel()
thisworkbook.refresh
end sub
 
Waarom wil je steeds een nieuwe?

Bijwerken kan met vernieuwen of:

Code:
sub draaitabel()
thisworkbook.refresh
end sub

Een nieuwe maken hoeft ook niet perse, maar het bereik van de data veranderd iedere maand.
Is er een gemakkelijke manier om dit steeds bij te werken?
 
geef de gegevens voor de draaitabel een dynamische naam m.b.v.


Kies in het lint voor Formules en daarin voor Namen beheren.

Klik op Nieuw, geef een naam (bv. DTgegevens) en zet in de onderste regel:

=VERSCHUIVING(Data!$A$1;;;AANTALARG(Data!$A:$A);7)

Klik op OK en Sluiten.

Ga naar de draaitabel en selecteer een cel in de draaitabel.
Klik in het lint op Opties en daarna op Andere gegevensbron. Vul daar achter Tabel/bereik de hierboven opgegeven naam in en klik op OK

Als het goed is hoef je nu de draaitabel niet meer te verwijderen/leeg te maken, maar alleen te vernieuwen nadat je in tabblad Data de nieuwe data geplakt hebt.
 
Dat gedoe met dynamische namen is overbodig als je de brongegevens opmaakt als tabel (start tab, ergens in het midden)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan