AW: wie das sein kann
02.12.2015 13:20:43
Josef
Hallo zusammen,
ich habe die Ursache gefunden.
Die UsedRange beinhaltete auch Zellen, die gar keine Daten enthielten. Sobald der Datenbereich der Pivot leere Zellen beinhaltet, werden diese in der Pivot als (Leer) angezeigt. Dadurch wird in der Pivot im Werte-Bereich nicht "Summe von Betrag" sondern automatisch "Anzahl von Betrag" erstellt.
Die UsedRange musste also zur "wirklichen" UsedRange werden, damit es funktioniert. Und das tut es jetzt:
Hier mein Makro:
Sub Pivot()
'Dieses Makro soll nur eingesetzt werden, nachdem in der Umsatz-Datei Intermodal die KWs ergä _
nzt wurden (auch dafür gibt es ein Makro).'
Dim myWorksheet As Worksheet
Dim Bereich As Range
'Die Variablen werden deklariert. Es gibt nur zwei Stück. myWorksheet bezieht sich auf das _
gerade aktive Tabellenblatt, Bereich ist der benutzte Zellenbereich in diesem.
For Each myWorksheet In Worksheets
On Error Resume Next
'Das Makro durchläuft alle Tabellenblätter (myWorksheet), etwaige Fehlermeldungen werden _
ignoriert.
myWorksheet.Activate
Set Bereich = RealUsedRange
'Die Variable Bereich wird durch die Funktion RealUsedRange (s.u.) ermittelt.
Range(Bereich.Address).Select
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _
Bereich, TableName:="Pivot_" & myWorksheet.Name
'Die RealUsedRange wird ausgewählt, dann wird eine Pivot daraus erstellt. Sie erhält einen _
Namen.'
ActiveSheet.Name = "Pivot " & myWorksheet.Name
ActiveSheet.Tab.ColorIndex = 6
'Das Tabellenblatt erhält einen Namen und wird eingefärbt.'
With ActiveSheet.PivotTables(1)
.PivotFields("Projektnr.").Orientation = xlRowField
.PivotFields("Betrag").Orientation = xlDataField
.TableStyle2 = "PivotStyleLight16"
.DisplayNullString = False
'Die Struktur und das Format der Pivot wird angepasst.'
End With
With ActiveSheet.PivotTables(1).PivotFields("Summe von Betrag")
.Function = xlSum
.NumberFormat = "#,##0.00"
'Das Zahlenformat der Zahlen in "Summe von Betrag" wird noch angepasst."
End With
Next
End Sub
Public Function RealUsedRange() As Range
Dim FirstRow As Long
Dim LastRow As Long
Dim FirstColumn As Integer
Dim LastColumn As Integer
'Die deklarierten Variablen bilden die Eckpunkte der RealUsedRange.'
On Error Resume Next
FirstRow = Cells.Find(What:="*", After:=Range("IV65536"), LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
FirstColumn = Cells.Find(What:="*", After:=Range("IV65536"), LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column
LastRow = Cells.Find(What:="*", After:=Range("A1"), LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastColumn = Cells.Find(What:="*", After:=Range("A1"), LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set RealUsedRange = Range(Cells(FirstRow, FirstColumn), Cells(LastRow, LastColumn))
On Error GoTo 0
End Function
Nochmal vielen Dank Franz und Rudi.
Beste Grüße
Josef