Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblatt automatisch beschriften

Tabellenblatt automatisch beschriften
15.08.2008 19:20:00
oblivion
Hallo, ich habe eine Frage. Gibt es eine Möglichkeit das Tabellenblatt automisch beschriften zu lassen, wenn man sagen wir in E4 einen Namen oder was anderes schreibt? Danke schon mal für eure Hilfe. Gruß Oblivion

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt automatisch beschriften
15.08.2008 19:25:00
Hajo_Zi
Hallo ,
benutze das Chabge Ereignis, oder die Suche des Forums.

AW: Tabellenblatt automatisch beschriften
15.08.2008 19:27:02
Hajo_Zi
Hallo
da ist ein b anstelle von n es sollte Change lauten.
Gruß Hajo

Anzeige
Ja, das geht!
15.08.2008 19:32:32
Backowe
Hi,
VBA-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Code in das entsprechende Tabellenblatt!
If Range("E4") "" Then ActiveSheet.Name = Target.Value
End Sub
Gruß Jürgen

Anzeige
Man könnte noch die Zelllänge abfragen, ...
15.08.2008 19:41:19
backowe
Hi,
... da der Tabellenblattname max. 31 Zeichen haben darf.
VBA-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Code in das entsprechende Tabellenblatt!
If Len(Range("E4")) < 32 And Range("E4") <> "" Then
  ActiveSheet.Name = Range("E4").Value
End If
End Sub
Gruß Jürgen

Anzeige
Neue Frage zu Tabellenblättern
15.08.2008 21:28:00
oblivion
Halo, vielen Dank für die Hilfe. Ich habe aber gleich noch eine Frage. Ich habe eine Exceldatei mit mehreren Tabellenblättern. Auf einem Tabellenblatt trage ich monatlich gewisse Daten ein. Die Daten werden automatisch auf die anderen Tabellenblätter übertragen. Die Daten sind bestimmten Personen zugeordnet. Wenn ich jetzt eine neue Person habe die ich erfassen möchte, muss ich zur Zeit noch von Hand ein neues Tabellenblatt erstellen und es in die entsprechende Form bringen. Kann ich mit Hilfe eines VBAs dies auch automatisch machen lassen. Also wenn ich auf dem ersten Blatt einen neuen Namen schreibe, dass er mir dann ein neues Tabellenblatt erstellt mit einer vorher festgelegten Form?
Danke für die Hilfe.
Gruß Oblivion

Anzeige
Lege dir ein Tabellenblatt als Vorlage an ...
16.08.2008 00:36:00
backowe
Hi,
... und kopiere den folgenden Code hinein, tritt in E4 eine Änderung ein, wird von der Vorlage eine Kopie erstellt und nach rechts ans Ende gestellt und nach E4 benannt.
VBA-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Code in das entsprechende Tabellenblatt!
If Len(Range("E4")) < 32 And Range("E4") <> "" Then
  If Sheets(Sheets.Count).Name <> Range("E4").Value Then
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = Range("E4")
  End If
End If
End Sub
Gruß Jürgen

Anzeige
AW: Tabellenblatt automatisch anlegen
16.08.2008 07:53:00
Erich
Hi Jürgen,
Vorsicht - dein Code tut mehr als du beschrieben hast.
Er wird mit der Mustertabelle kopiert, steht dann x-fach in der Mappe läuft auch in jeder Kopie.
Er rennt nicht nur dann los, wenn sich in E4 etwas ändert, sondern bei Änderung jeder Zelle.
Wenn in E4 der Neme eines nichtletzten Blatts geschrieben wird, greift die Prüfung
If Sheets(Sheets.Count).Name <> Range("E4").Value Then
nicht und es gibt einen Laufzeitfehler.
In E4 kann eine Zahl stehen. Das gibt dann auch Ärger.
Mein Vorschlag:

'Code in "DieseArbeitsmappe"
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lngI As Long
If Sh.Name  "Muster" Then Exit Sub
If Target.Address  "$E$4" Then Exit Sub
If Len(Target)  "" Then
For lngI = 1 To Sheets.Count
If Sheets(lngI).Name = "" & Target Then
MsgBox "Das Blatt " & Target & " gibt es schon!"
Exit Sub
End If
Next lngI
Sheets("Muster").Copy After:=Sheets(lngI - 1)
ActiveSheet.Name = Target
End If
End Sub

Hier könnte/sollte/müsste man noch prüfen, ob E4.Value ein gültiger Blattname ist.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Warum ich heute Nachte Sheets("Vorlage") ...
16.08.2008 09:43:00
Backowe
Hi Erich,
... durch Activesheet ersetzt habe, entzieht sich meiner Kenntnis. ;)
Gruß Jürgen

Noch eine Frage zu Tabellenblättern
17.08.2008 15:53:00
oblivion
Hallo @ Erich. Ich habe deinen Code gerade ausprobiert. Scheint alles so zu klappen. Aber ich habe noch eine Frage zu deinem Code. Ich habe eine Excel-Datei. Ich werde sie mal hochladen.
Nun zu meiner Frage. In diese Excel-Datei habe ich auf Blatt "Gesamt" in der Spalte ab L2 verschiedene Ärzte aufgelistet. Als ich die Orginaldatei erstellt hatte, habe ich schon 10 Ärzte gehabt. Kann man deinen Code so anpassen, dass er statt die Zelle E4 im Blatt Muster (eigentlich D7) nutzt, sondern immer wenn ich im Blatt "Gesamt" in Zeile L einen neuen Arzt reinschreibe mir dann ein neues Tabellenblatt mit dem entsprechenden Namen schreibt und gleichzeitig den Namen in die Zeile D7 setzt? Danke für deine Hilfe.
Gruß Oblivion

Anzeige
AW: Noch eine Frage zu Tabellenblättern
17.08.2008 17:11:00
oblivion
Frage noch offen
Gruß Oblivion

AW: Tabellenblätter anlegen
17.08.2008 20:38:34
Erich
Hallo Oblivion,
da das Ereignis "neuer Arzt" jetzt in "Gesamt" auftritt, habe ich die Prozeduren "Workbook_SheetChange"
in Blatt "Muster" (da gehörte sie eh nicht hin) und in "DieseArbeitsmappe" gelöscht.
In "Worksheet_Change" von "Gesamt" habe ich ein "ArztAnlegen" eingebaut. Ich hoffe, dass es so funzt.
Auf den ersten Blick nicht verstanden habe ich, wofür in dieser Prozedur Selection.Count abgefragt wird.
Ist das sinnvoll? Ich habe eine Zeile davor mal eine neue Zeile mit der Anweisung
MsgBox Selection.Address
eingefügt. Da siehst du, was Selection gerade ist.
Die Zeilen mit EnableEvents = True und ScreenUpdating = True habe ich ich ein "AnzeigeAn" ausgelagert -
ich bin prinzipiell faul und versuche, Code nur einmal hinzuschreiben.
Und hier die Mappe: https://www.herber.de/bbs/user/54684.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Tabellenblätter anlegen
17.08.2008 21:18:00
oblivion
hi, ich glaube es funktioniert so wie ich das mir vorgestellt habe. ich werde es noch in einem langzeit test ausführlich unter die lupe nehmen aber auf den ersten blick klappt alles. Was das selection macht, weiß ich auch nicht so genau. hab den code nicht selber geschrieben. hab ihn von einem anderen user aus diesem Forum bekommen. Danke nochmal für deine Hilfe.
Gruß oblivion

Anzeige
AW: Tabellenblätter anlegen
20.08.2008 17:54:00
Tino
Hallo,
bin grade mal dabei die Beiträge durchzulesen.
Das Selection.Count wird benötigt, da es vorkommen kann dass nicht nur eine Zelle bearbeitet wird
sondern z. Bsp. durch ziehen mehrere Daten auf einmal eigetragen werden, dann kommt man mit Target allein nicht weit.
Gruß Tino

Anzeige
AW: @Tino
20.08.2008 19:20:00
Erich
Hi Tino,
anstelle von Selection.Count könnte man besser Target.Count prüfen, muss man aber gar nicht.
Die Verarbeitung von ein- und die von mehrzelligen Änderungen braucht man nicht getrennt zu programmieren.
Nebenbei: Wenn für C=1 das zutrifft:
Intersect(Selection(C), Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
dann wird der Rest der Selection überhaupt nicht mehr geprüft.
IMHO kann man den bisherigen Codeteil austauschen durch einen erheblich kürzeren.
(Oben muss dafür noch "rngZ As Range" deklariert werden.):

' bisher:
On Error GoTo Fehler:
MsgBox Selection.Address
If Selection.Count > 1 Then
For C = 1 To Selection.Count
If Intersect(Selection(C), Range("E5:G56", "B5:B56")) Is Nothing Then _
Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Selection(C).Row - 1, B - 1) = _
Cells(Selection(C).Row, 2).Value
Else
Tabelle2.Cells(Selection(C).Row - 1, B + A).Value = _
Cells(Selection(C).Row, 3 + A).Value
End If
End If
Next A
Next C
Else
If Intersect(Target, Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Target.Row - 1, B - 1) = Cells(Target.Row, 2).Value
Else
Debug.Print Cells(Target.Row, 3 + A)
Tabelle2.Cells(Target.Row - 1, B + A).Value = _
Cells(Target.Row, 3 + A).Value
End If
End If
Next A
End If
Fehler:
' neu:
On Error GoTo Fehler:
If Intersect(Target, Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
AnzeigeAn
For Each rngZ In Intersect(Target, Range("E5:G56", "B5:B56"))
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(rngZ.Row - 1, B - 1) = Cells(rngZ.Row, 2).Value
Else
Debug.Print Cells(rngZ.Row, 3 + A)
Tabelle2.Cells(rngZ.Row - 1, B + A).Value = _
Cells(rngZ.Row, 3 + A).Value
End If
End If
Next A
Next rngZ
Fehler:

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: @Tino
20.08.2008 20:07:00
Tino
Hallo,
hast recht. super
Gruß Tino
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt automatisch beschriften und erstellen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Tabellenblatt, das du beschriften möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge den folgenden VBA-Code in das entsprechende Tabellenblatt ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Len(Range("E4")) < 32 And Range("E4") <> "" Then
           ActiveSheet.Name = Range("E4").Value
       End If
    End Sub
  4. Schreibe einen Namen in die Zelle E4. Das Tabellenblatt wird automatisch mit diesem Namen beschriftet.

  5. Speichere die Datei. Achte darauf, dass du sie im .xlsm-Format speicherst, um die Makros zu aktivieren.


Häufige Fehler und Lösungen

  • Fehler: "Das Blatt mit diesem Namen existiert bereits."

    • Lösung: Stelle sicher, dass der Name in E4 einzigartig ist. Du kannst eine Prüfung einfügen, um dies zu bestätigen.
  • Fehler: Laufzeitfehler, wenn die Zelllänge über 31 Zeichen liegt.

    • Lösung: Füge eine weitere Bedingung hinzu, um die Länge des Namens zu überprüfen, wie im obigen Code gezeigt.

Alternative Methoden

  • Statt den Namen manuell in E4 einzugeben, kannst du auch ein Dropdown-Menü nutzen. Verwende die Datenüberprüfung in Excel, um eine Liste von möglichen Namen anzubieten.
  • Du kannst ein Makro erstellen, das ein neues Blatt automatisch erstellt, wenn du einen neuen Namen in einer bestimmten Zelle eingibst. Hier ist ein Beispiel:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = "$E$4" Then
           If Len(Target) < 32 And Target <> "" Then
               Sheets.Add(After:=Sheets(Sheets.Count)).Name = Target
           End If
       End If
    End Sub

Praktische Beispiele

  1. VBA für die automatische Erstellung eines neuen Blattes:

    Wenn du ein neues Blatt mit einem Namen erstellst, kannst du die folgende Logik verwenden:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = "$E$4" Then
           If Len(Target) < 32 And Target <> "" Then
               Sheets.Add(After:=Sheets(Sheets.Count)).Name = Target
           End If
       End If
    End Sub
  2. Erstellen einer Vorlage:

    Du kannst eine Vorlage für dein neues Tabellenblatt anlegen. Kopiere das Musterblatt und benenne es nach dem Namen in E4.


Tipps für Profis

  • Verwende benannte Bereiche: Benenne den Bereich, den du beschriften möchtest, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung im VBA-Code, um unerwartete Fehler zu vermeiden.
  • Automatisiere den Prozess: Kombiniere mehrere Skripte, um den gesamten Prozess der Blätterbeschriftung und -erstellung zu automatisieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Blätter gleichzeitig beschriften?
Du kannst eine Schleife in deinem VBA-Code implementieren, um alle gewünschten Blätter zu durchlaufen und diese entsprechend zu beschriften.

2. Kann ich die Blätter mit spezifischen Formaten erstellen?
Ja, du kannst ein vorgefertigtes Tabellenblatt kopieren und alle notwendigen Formatierungen und Formeln beibehalten, wenn du ein neues Blatt erstellst.

3. Was passiert, wenn ich einen ungültigen Blattnamen eingebe?
Excel erlaubt keine Blattnamen mit bestimmten Zeichen (z.B. /, \, ?, *, [ oder ]). Stelle sicher, dass der Name in E4 diesen Anforderungen entspricht, um Fehler zu vermeiden.

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