Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: pivottabellennamen dynamisch ändern

pivottabellennamen dynamisch ändern
04.07.2014 11:27:53
Hewad

Sub Pivotnames_change()
Dim wb As Workbook
Dim ws As Worksheet
Dim wsList As Worksheet
Dim pt As PivotTable
Dim lPT As Long
On Error Resume Next
Set wb = ActiveWorkbook
Set wsList = Worksheets.Add
With wsList
.Range(.Cells(1, 1), .Cells(1, 4)).Value _
= Array("Sheet", "PivotTable", "Source Data", "New Names")
End With
lPT = 2
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
With wsList
.Range(.Cells(lPT, 1), .Cells(lPT, 3)).Value _
= Array(ws.Name, pt.Name, pt.SourceData)
End With
lPT = lPT + 1
Next pt
Next ws
With wsList
.Columns("A:C").EntireColumn.AutoFit
.Rows(1).Font.Bold = True
End With
MsgBox "now enter the new pwt table names in column New Names"
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
pt.Name = Columns("D")
Next pt
Next ws
End Sub

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: pivottabellennamen dynamisch ändern
04.07.2014 11:36:23
Hewad
Hallo zusammen,
irgendwie ist mein geschriebener Text bzw. mein Problembeschreibung weg.
ich habe eine Arbeitsmappe mit mehreren Arbeitsblättern. Jedes AB hat wiederrum mehrere Pivots.
Ich habe einen Code, der mir alle Pivots (Blattnamen, Pivottabellennamen, sowie Datenbereich) auflistet.
Ich möchte aber die neuen Pivottabellennamen in der Spalte D untereinander (bsp. pvot1, pvot2....etc) eingeben und der Code soll sie dynamisch übernehmen.
Vielen herzlichen Dank im Voraus!

Anzeige
AW: pivottabellennamen dynamisch ändern
04.07.2014 16:09:16
fcs
Hallo Hewad,
es funktioniert leider nicht, wenn du nur die MsgBox einblendest.
Entweder muss du das Umbenennen in einem 2. Makro durchführen oder zweilenweise die neuen Namen abfragen und in einer Inputbox eingeben. Als weitere Alternative könnte man ein kleines ungebundenes Userform einblenden, in dem dann per Schaltfläche nach Eingabe der neuen Namen in der Tabelle das Umbenennen gestartet wird.
Nachfolgend eine Variante mit zeilenweiser Eingabe der neuen Namen inkl. einiger Prüfungen.
Gruß
Franz
Sub Pivotnames_change()
Dim wb As Workbook
Dim ws As Worksheet
Dim wsList As Worksheet
Dim pt As PivotTable
Dim strNewName As Variant
Dim lPT As Long
'On Error Resume Next
Set wb = ActiveWorkbook
Set wsList = Worksheets.Add
With wsList
.Range(.Cells(1, 1), .Cells(1, 4)).Value _
= Array("Sheet", "PivotTable", "Source Data", "New Names")
End With
Range("A2").Select
ActiveWindow.FreezePanes = True
lPT = 2
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
With wsList
.Range(.Cells(lPT, 1), .Cells(lPT, 3)).Value _
= Array(ws.Name, pt.Name, pt.SourceData)
End With
lPT = lPT + 1
Next pt
Next ws
With wsList
.Columns("A:C").EntireColumn.AutoFit
.Rows(1).Font.Bold = True
Eingabe_Namen:
For lPT = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row '
.Rows(lPT).Select
ActiveWindow.ScrollRow = lPT - 1
Eingabe_Repeat:
strNewName = InputBox("Neuer Name der Pivottabelle" & vbLf & vbLf _
& "Sheet-Name:  " & .Cells(lPT, 1).Text & vbLf _
& "PiovtTable:  " & .Cells(lPT, 2).Text & vbLf _
& "Source Data: " & .Cells(lPT, 3).Text, "Name Pivot-Tabelle", _
IIf(.Cells(lPT, 4).Value = "", .Cells(lPT, 2).Text, .Cells(lPT, 4).Value))
If strNewName = "" Then
'Abbrechen - Default-Name (alter Name bzw. falls schon vorhanden der neue
.Cells(lPT, 4).Value = "'" & IIf(.Cells(lPT, 4).Value = "", _
.Cells(lPT, 2).Text, .Cells(lPT, 4).Text) '=alter Name/Eingabe
Else
'nach Prüfung neuen Namen eintragen
If fncCheckname(ws:=ActiveWorkbook.Worksheets(.Cells(lPT, 1).Text), _
strNamePT:=strNewName, _
pvTab:=ActiveWorkbook.Worksheets(.Cells(lPT, 1).Text) _
.PivotTables(.Cells(lPT, 2).Text)) = True Then
.Cells(lPT, 4).Value = "'" & strNewName
Else
GoTo Eingabe_Repeat
End If
End If
Next lPT
ActiveWindow.ScrollRow = 2
Select Case MsgBox("Alle neuen Pivot-Tabellennamen ok?" & vbLf & vbLf _
& "Ja = Pivot-Tabellen werden umbenannt" & vbLf _
& "Nein = Neue Namen werden nochmals abgefragt" & vbLf _
& "Abbrechen = Pivottabellen werden nicht umbenannt", _
vbQuestion + vbYesNoCancel, _
"Neue Namen Pivot-Tabellen")
Case vbYes
'Pivottabellen umbenennen
For lPT = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
Set ws = wb.Sheets(.Cells(lPT, 1).Text)
Set pt = ws.PivotTables(.Cells(lPT, 2).Text)
pt.Name = .Cells(lPT, 4).Text
Next lPT
Case vbNo
GoTo Eingabe_Namen
Case vbCancel
'Abbrechen
End Select
End With
End Sub
Function fncCheckname(ws As Worksheet, ByVal strNamePT As String, pvTab As PivotTable) As  _
Boolean
'Prüft ob der eingegebene neue Name schon für eine existierende Pivot-Tabelle im Blatt  _
existiert.
Dim pvT As PivotTable
If strNamePT = "" Then
MsgBox "Leerstring ist als Name nicht zulässig!"
Exit Function
End If
fncCheckname = True
For Each pvT In ws.PivotTables
If Not LCase(pvT.Name) = LCase(pvTab.Name) Then
If LCase(pvT.Name) = LCase(strNamePT) Then
MsgBox "Der eingegebene Name exitiert schon für eine andere Pivot-Tabelle im Blatt", ,  _
_
"Prüfung Name Pivot-Tabelle"
fncCheckname = False
Exit Function
End If
End If
Next
End Function

Anzeige
AW: pivottabellennamen dynamisch ändern
07.07.2014 14:34:08
Hewad
@Franz
du bist ein Genie. Eine bessere Variante gibt es sicherlich nicht!
Vielen herzlichen Dank!
Gruß
Hewad

AW: pivottabellennamen dynamisch ändern
07.07.2014 14:36:07
Hewad
@Franz
du bist echt ein Genie!
Vielen herzlichen Dank. Eine besser Variante gib es sicherlich nicht!
Gruß
Hewad

AW: pivottabellennamen dynamisch ändern
07.07.2014 15:26:47
Hewad
@ Franz
also diese Variante ist natürlich genial. Gibt es eine zweite Variante, wo man die neuen Tablnamen direkt in die Spalte eingeben kann und nicht via Inputbox. Bei 180 Pivots, ist es leider etwas aufwendiger :-)
Vielen Dank im Voraus
PS. idealerweise mit Hyperlink, wenn s geht :-)

Anzeige
AW: pivottabellennamen dynamisch ändern
07.07.2014 18:21:33
fcs
Hallo Hewad,
hier eine Datei mit dem schon bekannten Makro und der Variante "Pivotnames_change_mit_UF" mit einem nicht gebundenen Userform.
https://www.herber.de/bbs/user/91408.xlsm
Nach dem Starten des Makros wird die neue Tabelle angezeigt und das userform "schwebt" über dem Excel-Programmfenster.
Nach Eingabe der neuen Namen in Spalte D kann im userform die Umbenennung gestartet werden.
Vor dem Umbenennen werden die neuen Namen geprüft. In Spalte E werden Hinweise eingetragen. Nach korrektur der Namen das Umbenenne jeweils im Userform nochmals starten.
Gruß
Franz

Anzeige
AW: pivottabellennamen dynamisch ändern
08.07.2014 14:05:33
Hewad
Hallo lieber Franz,
danke noch einmal für deine Mühne.
ich bekomme bei der Ausführung folgende Fehlermeldung.
Set wsList = ThisWorkbook.Worksheets(Me.Tag)
Ich muss sagen, es ist eine große Arbeitsmappe, die mehrere Arbeitsblätter enthält. Jedes AB hat wiederum mehrere Pivottabellen. Die Pivottabellennamen kommen leider mehrfach vor, weil ich die Arbeitsblätter jeweils kopiert habe, um mir die Arbeit zu erleichtern. Sonst musste ich alle Pivots manuell machen.
Danke und Gruß
Hewad

Anzeige
AW: pivottabellennamen dynamisch ändern
08.07.2014 15:30:14
fcs
Hallo Hewad,
das Ganze funktioniert nur wenn du Makro "Pivotnames_change_mit_UF", dann in der Liste die neuen Namen einträgst (du kannst auch für eine Pivot-Tab den alten Namen wieder verwenden), und wenn alles fertig ist klickst du auf die Schaltfläche im Userform. Du darfst das Userform in der Zwischenzeit nicht schließen!
Wenn du die Liste mit den neuen Namen (bei mehreren 100 Pivottabellen verständlich) in mehreren Etappen eintragen willst, dann muss das Erstellen der Liste mit Namen der Pivottabellen und das Umbenennen in 2 getrennten Makros erfolgen. Man muss dann nur darauf achten, dass das Umbenennmakro auf das richtige Tabellenblatt zugreift.
Gruß
Franz
Makros in einem allgemeinen Modul
'Dieses Makro starten, um in einem zusätzlichen Tabellenblatt die Liste _
der Namen der Pivottabellen in der Arbeitsmappe anzulegen.
Sub Pivotnames_change_Liste_anlegen()
Dim wb As Workbook
Dim ws As Worksheet
Dim wsList As Worksheet
Dim pt As PivotTable
Dim strNewName As Variant
Dim lPT As Long
'On Error Resume Next
Set wb = ActiveWorkbook
Set wsList = Worksheets.Add
With wsList
.Range(.Cells(1, 1), .Cells(1, 4)).Value _
= Array("Sheet", "PivotTable", "Source Data", "New Names")
End With
Range("A2").Select
ActiveWindow.FreezePanes = True
lPT = 2
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
With wsList
.Range(.Cells(lPT, 1), .Cells(lPT, 3)).Value _
= Array(ws.Name, pt.Name, pt.SourceData)
End With
lPT = lPT + 1
Next pt
Next ws
With wsList
.Columns("A:C").EntireColumn.AutoFit
.Rows(1).Font.Bold = True
End With
End Sub
'Dieses Makro starten, wenn in der Spalte "New Names" alle Zellen ausgefüllt sind.
Sub Pivotnames_change_neue_Namen()
Dim wb As Workbook, ws As Object
Dim wsList As Worksheet
Dim pt As PivotTable
Dim strNewName As Variant
Dim lPT As Long, bolCheck As Boolean
Set wsList = ActiveSheet
Set wb = wsList.Parent
With wsList
If Not (.Cells(1, 2).Value = "PivotTable" _
And .Cells(1, 3).Value = "Source Data" _
And .Cells(1, 4).Value = "New Names") Then
MsgBox "Das aktive Tabellenblatt enthält keine Liste mit neuen " _
& "Pivot-Tabellennamen!", , "Pivot-Tabellen umbenennen"
Exit Sub
End If
.Columns("D:D").EntireColumn.AutoFit
.Columns("E:E").ClearContents
Select Case MsgBox("Alle neuen Pivot-Tabellennamen im aktiven Tabellenblatt ok?" _
& vbLf & vbLf _
& "Ja = Pivot-Tabellen werden umbenannt" & vbLf _
& "Nein = Neue Namen werden nochmals abgefragt" & vbLf _
& "Abbrechen = Pivottabellen werden nicht umbenannt", _
vbQuestion + vbYesNoCancel, _
"Neue Namen Pivot-Tabellen")
Case vbYes
'Prüfen, ob Leere Zellen als neue Namen vorkommen
bolCheck = False
For lPT = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(lPT, 4).Text = "" Then
.Cells(lPT, 5).Value = "Leerzelle als neuer Name nicht zulässig"
bolCheck = True
End If
Next lPT
If bolCheck = True Then
MsgBox "Leerzellen sind als neue Namen nicht zulässig", , _
"Pivot-Tabellen umbenennen"
Exit Sub
End If
'Prüfen ob neue Pivotnamen in einem Blatt doppelt vorkommen
lPT = .Cells(.Rows.Count, 1).End(xlUp).Row
If lPT > 1 Then
With .Range(.Cells(2, 5), .Cells(lPT, 5))
.FormulaR1C1 = _
"=SUMPRODUCT((R2C1:R" & lPT & "C1=RC[-4]) * (R2C4:R" & lPT & "C4=RC[-1]))"
.Value = .Value
If Application.WorksheetFunction.CountIf(.Cells, ">1") > 0 Then
For lPT = 1 To .Rows.Count
If .Cells(lPT, 1).Value = 1 Then
.Cells(lPT, 1).ClearContents
End If
Next
MsgBox "Es gibt doppelte Namen von Pivottabellen" & vbLf _
& "(in Spalte E mit Werten 2 oder größer gekennzeichnet)", , _
"Pivot-Tabellen umbenennen"
Exit Sub
Else
.Clear
End If
End With
End If
bolCheck = False
'Pivottabellen namen auf schon vorhandenen prüfen
For lPT = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
Set ws = wb.Sheets(.Cells(lPT, 1).Text)
Set pt = ws.PivotTables(.Cells(lPT, 2).Text)
If fncCheckname(ws, strNamePT:=.Cells(lPT, 4).Text, pvTab:=pt, _
bolMsg:=False) = False Then
.Cells(lPT, 5).Value = "Name in Zeile " & lPT _
& " schon für andere Pivot-Tabelle im Tabellenblatt vorhanden"
bolCheck = True
End If
Next lPT
If bolCheck = True Then
MsgBox "Neue Namen werden für eine andere Pivottabelle verwendet"
Exit Sub
End If
'Pivottabellen umbenennen
For lPT = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
Set ws = wb.Sheets(.Cells(lPT, 1).Text)
Set pt = ws.PivotTables(.Cells(lPT, 2).Text)
pt.Name = .Cells(lPT, 4).Text
Next lPT
MsgBox "Pivot-Tabellen sind umbenannt"
Case vbNo
Exit Sub
Case vbCancel
'Abbrechen
End Select
End With
End Sub
Function fncCheckname(ws As Worksheet, ByVal strNamePT As String, _
pvTab As PivotTable, Optional bolMsg As Boolean = True) As Boolean
'Prüft ob der eingegebene neue Name schon für eine andere Pivot-Tabelle _
im Blatt existiert.
Dim pvT As PivotTable
If strNamePT = "" Then
If bolMsg = True Then MsgBox "Leerstring ist als Name nicht zulässig!"
Exit Function
End If
fncCheckname = True
For Each pvT In ws.PivotTables
If Not LCase(pvT.Name) = LCase(pvTab.Name) Then
If LCase(pvT.Name) = LCase(strNamePT) Then
If bolMsg = True Then
MsgBox "Der eingegebene Name exitiert schon für eine andere " _
& "Pivot-Tabelle im Blatt", , _
"Prüfung Name Pivot-Tabelle"
End If
fncCheckname = False
Exit Function
End If
End If
Next
End Function

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dynamisches Ändern von Pivottabellennamen in Excel


Schritt-für-Schritt-Anleitung

Um Pivottabellennamen dynamisch in Excel zu ändern, kannst du den folgenden VBA-Code verwenden. Dieser Code erstellt eine Liste aller Pivottabellen in deiner Arbeitsmappe und ermöglicht dir, neue Namen in einer Spalte einzugeben.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu (Einfügen > Modul) und kopiere den folgenden Code hinein:
Sub Pivotnames_change()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim wsList As Worksheet
    Dim pt As PivotTable
    Dim lPT As Long
    Set wb = ActiveWorkbook
    Set wsList = Worksheets.Add
    With wsList
        .Range(.Cells(1, 1), .Cells(1, 4)).Value = Array("Sheet", "PivotTable", "Source Data", "New Names")
    End With
    lPT = 2
    For Each ws In wb.Worksheets
        For Each pt In ws.PivotTables
            With wsList
                .Range(.Cells(lPT, 1), .Cells(lPT, 3)).Value = Array(ws.Name, pt.Name, pt.SourceData)
            End With
            lPT = lPT + 1
        Next pt
    Next ws
    With wsList
        .Columns("A:C").EntireColumn.AutoFit
        .Rows(1).Font.Bold = True
    End With
    MsgBox "Jetzt neue Pivottabellennamen in Spalte D eingeben."
    ' Hier wird der Code zum Umbenennen eingefügt
End Sub
  1. Führe den Code aus, um eine Liste aller Pivottabellen zu erstellen.
  2. Gib neue Pivottabellennamen in die Spalte D ein.
  3. Füge den folgenden Code hinzu, um die Namen zu aktualisieren:
For lPT = 2 To wsList.Cells(wsList.Rows.Count, 1).End(xlUp).Row
    Set ws = wb.Sheets(wsList.Cells(lPT, 1).Text)
    Set pt = ws.PivotTables(wsList.Cells(lPT, 2).Text)
    pt.Name = wsList.Cells(lPT, 4).Text
Next lPT

Häufige Fehler und Lösungen

  • Fehler: "Der eingegebene Name existiert schon."

    • Lösung: Achte darauf, dass die neuen Pivottabellennamen einzigartig sind. Der Code prüft auf doppelte Namen, bevor er die Umbenennung durchführt.
  • Fehler: "Das aktive Tabellenblatt enthält keine Liste mit neuen Pivot-Tabellennamen!"

    • Lösung: Stelle sicher, dass die erste Zeile deines aktiven Blattes die korrekten Überschriften hat: "Sheet", "PivotTable", "Source Data", "New Names".

Alternative Methoden

Eine Alternative ist die Verwendung eines UserForms zur Eingabe der neuen Pivottabellennamen. Dies kann die Eingabe erleichtern, insbesondere wenn du viele Pivots hast. Der UserForm kann mit einem Button verbunden werden, der das Umbenennen der Pivottabellen auslöst.

Hier ein Beispiel für den UserForm:

' UserForm Code für das Umbenennen
Private Sub btnRename_Click()
    ' Hier wird der Umbenennungsprozess gestartet
End Sub

Praktische Beispiele

Angenommen, du hast 180 Pivottabellen und möchtest sie umbenennen. Fülle die Spalte D mit Namen wie "Pivot1", "Pivot2", ..., "Pivot180". Der oben genannten Code wird dann die neuen Namen automatisch übernehmen.


Tipps für Profis

  • Nutze die Funktion On Error Resume Next vorsichtig, um Fehler zu ignorieren, die während der Ausführung deines Codes auftreten könnten.
  • Mache regelmäßig Backups deiner Arbeitsmappe, bevor du umfangreiche Änderungen vornimmst.
  • Teste den Code in einer kleinen Testdatei, bevor du ihn auf eine große Arbeitsmappe anwendest.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die neuen Namen gültig sind? Verwende die Funktion fncCheckname im Code, um zu prüfen, ob der neue Name bereits für eine andere Pivot-Tabelle verwendet wird.

2. Kann ich die Namen direkt in Excel eingeben, anstatt eine InputBox zu verwenden? Ja, du kannst die neuen Namen in einer separaten Spalte (z.B. Spalte D) eingeben und dann den Code zur Umbenennung ausführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige