Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1812to1816
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
Inhaltsverzeichnis

Dynamisch Excel Tabellenblätter adden

Dynamisch Excel Tabellenblätter adden
18.02.2021 19:59:50
Christoph
Hallo zusammen,
hat jemand eine Idee, wie man aus einem Excelblatt, bei welcher man in Spalte A, ab Zeile 2 folgend, einen Wert eintragen kann und dann mithilfe eines Makros ein neues Tabellenblatt pro beschrieben Zeile in Spalte A anlegt. Die Tabellenblätter sollten gleich den Namen, der in Spalte A hinterlegt ist, erhalten.
Des Weiteren müsste geprüft werden, dass wenn man später weitere Zeilen in Spalte A hinzufügt, nur weitere entsprechende Tabellenseiten hinzugefügt werden.
Jemand eine Idee wie so etwas aussehen würde? Stehe hier gerade auf dem Schlauch.
Vielen Dank für Hilfe :)

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
18.02.2021 21:22:35
Werner
Hallo,
der Code gehört ins Cosemodul des Tabellenblattes, bei dem du in Spalte A die neuen Blätter eingibst.
Rechtsklick auf den Tabellenblattreiter - Code anzeigen - Code rechts ins Codefenster kopieren.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
If Target  "" Then
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Next Worksheet
Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Target
End If
End If
End If
End Sub
Gruß Werner
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 08:53:55
Christoph
Hallo Werner,
besten Dank.
Funktioniert sehr gut. Ein Problem, dass aktuell noch auftritt, ist das wenn eine Zeile umbenannt wird, dann das Tabellenblatt nicht umbenannt wird, sondern das bestehende Blatt vorhanden bleibt und zusätzlich ein neues Blatt erstellt wird.
Ist es auch möglich, die Tabellen mithilfe eines Makros zu generieren?
Viele Grüße
Christoph
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 09:56:21
Werner
Hallo,
füge bitte in deiner Datei eine leere Spalte nach Spalte A ein. Du solltest also Spalte A haben und dann eine leere Spalte B. Die Spalte B dann ausblenden. Dort werden für das Makro die Blattnamen ebenfalls erfasst. So kann ich über das Makro für das "Umbenennen" auf die "alten" Blattnamen zugreifen.
Das braucht ja niemand zu sehen, deshalb die Spalte B ausblenden.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
If Target  "" Then
If Target = Target.Offset(, 1) Or Target.Offset(, 1) = "" Then
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Next Worksheet
Worksheets.Add after:=Worksheets(Sheets.Count)
ActiveSheet.Name = Target
Target.Offset(, 1) = Target
Else
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
If Worksheet.Name = Target.Offset(, 1) Then
Worksheet.Name = Target
Target.Offset(, 1) = Target
Exit For
End If
Next Worksheet
End If
End If
End If
End If
End Sub
Gruß Werner
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 11:05:27
Christoph
Hallo Werner,
guter Hinweis, die Tabellenblätter werden erstellt und sobald man ein einzelnes, bereits erstelltes Blatt in Spalte A umbenennt, so passiert nichts. Es zeigt keinen Fehler oder Msg an.
Auch falls ein Blattname bereits existiert, wird keine Nachricht ausgegeben.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
If Target  "" Then
If Target = Target.Offset(, 1) Or Target.Offset(, 1) = "" Then
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Next Worksheet
Worksheets.Add after:=Worksheets(Sheets.Count)
ActiveSheet.Name = Target
Target.Offset(, 1) = Target
Else
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
If Worksheet.Name = Target.Offset(, 1) Then
Worksheet.Name = Target
Target.Offset(, 1) = Target
Exit For
End If
Next Worksheet
End If
End If
End If
End If
End Sub
Gruß Christoph
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 11:59:18
Christoph
Hallo Werner,
mein Tabellenblatt funktioniert exakt wie deines.
Was ich aber meinte, sobald ich in der Zeile ein Tabellenbaltt umbenenne, so aktualisiert er diese Benennung nicht im Blatt.
Gruß Christoph
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 12:27:17
Werner
Hallo,
was meinst du damit? so aktualisiert er diese Benennung nicht im Blatt
Soll der Blattname auch irgendwo im entsprechenden Blatt eingetragen werden? Wenn ja, wo denn?
Davon war bisher noch nicht die Rede.
Gruß Werner
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 13:34:22
Christoph
Hallo Werner,
meine damit, dass die Werte in Spalte A führend sind und falls sich hier bestehende Zeilen mit einem bereits bestehendem Blatt umbenenne, diese nicht aktualisiert werden.
Kurz gesagt:
Zeile A2 steht folgender Wert: 1234
- Es wird ein Blatt erstellt mit Blattname=1234 (soweit alles super)
Jetzt überschreibe ich Zeile A2 mit dem Wert 5678
- Das bereits bestehende Blatt sollte den Namen dann auch in 5678 aktualisieren.
Gruß Christoph
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 14:18:18
Werner
Hallo,
und genau das macht das Makro auch.
In meiner Beispielmappe:
Im Tabellenblatt Tabelle1 schreibst du in A2 Christoph
-Tabellenblatt Christoph wird am Ende neu angelegt
Jetzt überschreibst du im Tabellenblatt Tabelle1 in A2 Christop auf Werner
-Tabellenblatt Christoph wird umbenannt in Werner
Kann es denn sein, dass du die ganze Zeit im neu angelegten Blatt in A2 was rein schreibst? Nachdem ein neues Blatt angelegt wurde, befindest du dich nämlich in diesem neu angelegten Blatt und da reagiert nix auf Eingabe in Spalte A, sondern nur im Tabellenblatt Tabelle1.
Gruß Werner
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 14:33:02
Christoph
Hallo,
glaube der Fehler beginnt vorher bei mir:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
If Target  "" Then
If Target = Target.Offset(, 1) Or Target.Offset(, 1) = "" Then
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Next Worksheet
Worksheets.Add after:=Worksheets(Sheets.Count)
ActiveSheet.Name = Target
Target.Offset(, 1) = Target
Else
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
If Worksheet.Name = Target.Offset(, 1) Then
Worksheet.Name = Target
Target.Offset(, 1) = Target
Exit For
End If
Next Worksheet
End If
End If
End If
End If
End Sub
Bei
Worksheets.Add after:=Worksheets(Sheets.Count)
ActiveSheet.Name = Target
Target.Offset(, 1) = Target
bringt er mir einen Laufzeitfehler "1004" mit der Nachricht "Dieser Namen wird bereits verwendet" und anschließend das Auswahlfenster "Debuggen".
Sprich er geht im Programm nicht weiter.
Weiß aber nicht warum er das jetzt macht. Excel Version ist 2016 Professional.
Viele Grüße
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
19.02.2021 15:35:31
Werner
Hallo,
ich habe keine Ahnung was du machst - bei mir macht das Makro genau das was es soll.
-entweder ein neues Blatt anlegen, mit dem Namen der in Spalte A eingetragen wird
-sollte ein derartiges Blatt schon vorhanden sein, dann kommt die Message Box
-wird ein Blattname in Spalte A überschrieben, dann wird der Name des Blattes (der in Spalte B steht) geändert
-sollte ein Blatt mit dem Namen (der in Spalte A geändert wurde) schon vorhanden sein, kommt die Message Box
ein Fehler kommt bei mir nicht.
Nimm mal meine hochgeladene Datei. Lösch alle Blätter bis auf Tabelle1. Lösch alle Einträge in Spalte A und in Spalte B
Und jetzt fängst du mal an. Dann schreibst du mir, was du genau, Schritt für Schritt gemacht hast, dass der Fehler aufgetreten ist.
Gruß Werner
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
21.02.2021 19:16:48
Christoph
Hallo Werner,
du hast recht, es funktioniert! Nachdem ich deine Excel heruntergeladen habe und alles gelöscht habe, funktioniert es. Vielen Dank :)
Eine Frage, ist es möglich, das ein jedes neue Tabellenblatt in die Spalte A Zeile 1 den Text "Inhaber" erhält und Spalte B "Kontostand" ? Wie quasi eine Vorlage?
Gruß Christoph
AW: Dynamisch Excel Tabellenblätter adden
21.02.2021 20:19:18
Werner
Hallo,
na dann ist ja gut - hätte mich jetzt aber auch schwer gewundert, wenns nicht funktioniert hätte.
Und das mit dem Zuatz - na klar.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
If Target  "" Then
If Target = Target.Offset(, 1) Or Target.Offset(, 1) = "" Then
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Next Worksheet
Worksheets.Add after:=Worksheets(Sheets.Count)
ActiveSheet.Name = Target
ActiveSheet.Range("A1") = "Inhaber"
ActiveSheet.Range("B1") = "Kontostand"
Target.Offset(, 1) = Target
Else
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = Target Then
MsgBox "Hinweis: Das Blatt " & Target & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
If Worksheet.Name = Target.Offset(, 1) Then
Worksheet.Name = Target
Target.Offset(, 1) = Target
Exit For
End If
Next Worksheet
End If
End If
End If
End If
End Sub
Gruß Werner
Anzeige
AW: Dynamisch Excel Tabellenblätter adden
21.02.2021 20:34:27
Christoph
Hallo Werner,
ich glaub ich habe da noch einen Fehler gefunden. Die Tabellen werden umbenannt, solange man Werte für Spalte A nimmt, die "Namen" (z.B. Otto, Gustav...) haben. Aber sobald man die Ziffer "1" eingibt, dann in die nächste Zeile Ziffer "2", werden entsprechende Seiten mit Seitenname "1" bzw. "2" erstellt. Geht man aber wieder auf die Zeile 1, änder dort die "1" in "3" um, so passiert nichts.
Ist dies bei dir auch so?
Gruß Christoph
AW: Dynamisch Excel Tabellenblätter adden
21.02.2021 22:39:10
Werner
Hallo,
so, und um einer möglichen weiteren Rückfrage wegen "verbotener Zeichen" im Blattname bzw. mehr als 31 Zeichen beim Blattnamen, jetzt noch mal neu mit einer Function /von Udo hier aus dem Forum).
Verbotene Zeichen werden durch Unterstriche ersetzt und der Blattname wird auf 31 Zeichen gekürzt.
Ein Punkt im Battnamen wäre zwar zulässig. Ich lass ihn aber trotzdem ersetzen, damit Excel da nicht ein Datum daraus macht.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strBlattname As String
If Target.Count = 1 Then
If Target.Column = 1 And Target.Row > 1 Then
If Target  "" Then
If Target = Target.Offset(, 1) Or Target.Offset(, 1) = "" Then
strBlattname = Target
strBlattname = LegalSheetName(strBlattname)
For Each Worksheet In ThisWorkbook.Worksheets
If CStr(Worksheet.Name) = strBlattname Then
MsgBox "Hinweis: Das Blatt " & strBlattname & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Next Worksheet
Worksheets.Add after:=Worksheets(Sheets.Count)
ActiveSheet.Name = strBlattname
ActiveSheet.Range("A1") = "Inhaber"
ActiveSheet.Range("B1") = "Kontostand"
Application.EnableEvents = False
Target.Resize(1, 2) = strBlattname
Application.EnableEvents = True
Else
strBlattname = Target
strBlattname = LegalSheetName(strBlattname)
For Each Worksheet In ThisWorkbook.Worksheets
If CStr(Worksheet.Name) = strBlattname Then
MsgBox "Hinweis: Das Blatt " & strBlattname & " gibt es schon."
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
If CStr(Worksheet.Name) = CStr(Target.Offset(, 1)) Then
Worksheet.Name = strBlattname
Application.EnableEvents = False
Target.Resize(1, 2) = strBlattname
Application.EnableEvents = True
Exit For
End If
Next Worksheet
End If
End If
End If
End If
End Sub
Function LegalSheetName(strName As String) As String
Dim arrNotAllowed As Variant, n As Integer
'#### von Udo aus'm Pott ####
'Im Tabellennamen nicht zulässige Zeichen
arrNotAllowed = Array(":", ".", "\", "/", "?", "*", "[", "]")
'unerlaubte Zeichen durch "_" ersetzen
For n = 0 To UBound(arrNotAllowed)
strName = Replace(strName, arrNotAllowed(n), "_")
Next
'Namen auf 31 Zeichen begrenzen
LegalSheetName = Left(strName, 31)
End Function
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige