Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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!

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

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

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige