Frage von AndiPa, 237

Excel Tabellenblätter automatisch umbenennen und aktualisieren?

Hallo, ich bin Excel-Anfänger und möchte für die Schule eine Zeugnisliste erstellen. Dazu habe ich auf dem ersten Blatt mit der Bezeichnung "Namen" eine Liste mit Name, Vorname usw. von den Schülern erstellt. Auf den folgenden Seiten habe ich die Notenblätter. Jedes Notenblatt zieht im Feld C1 den Namen und im Feld H1 den Vornamen des Schülers (Quelle ist jeweils das erste Blatt mit der Bezeichnung "Namen"). Jetzt möchte ich, dass die Notenblätter automatisch umbenannt werden nach den Namen der Schüler (Bsp.: Mustermann, Heike) und auch dass die Namen der Notenblätter automatisch aktualisiert werden, wenn sie auf dem ersten Blatt "Namen" geändert werden. Wer kann mir helfen?

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 153

Ausgangslage: Auf dem Hauptblatt steht in Spalte A der Name und in Spalte B der Vorname des Schülers.

Dann definiere folgendes Event am Haupttabellenblatt:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count = 1 And Target.Row > 1 And Target.Column <= 2 And Not IsEmpty(Target.Value) Then
    If Worksheets.Count < Target.Row Then _
      Worksheets.Add after:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
    If Target.Column = 1 Then
      Worksheets(Target.Row).Name = Target.Value
      Worksheets(Target.Row).Range("C1") = Target.Value
    End If
    If Target.Column = 2 Then _
      Worksheets(Target.Row).Range("H1") = Target.Value
  End If
End Sub
Kommentar von AndiPa ,

Hallo. Was heißt Haupttabellenblatt? Meine Datei besteht derzeit aus 34 Blättern. Blatt 1 ist die Liste mit den Nachnamen (B2 bis B34) und den Vornamen (C2 bis C34). Das nächste Blatt ist mein Notenblatt des 1. Schülers. Dort befindet sich im Feld C1 der Nachname und im Feld H1 der Vorname. Diese Namen bekommen die Notenblätter vom Blatt 1 (Namensliste). Jetzt möchte ich, dass alle Notenblätter benannt werden nach Name und Vorname des Schülers und automatisch geändert werden, wenn die Namensliste geändert wird.

Für mich als Laien leider viel zu kompliziert!

Kommentar von Suboptimierer ,

Mit Haupttabellenblatt meine ich das Blatt mit Nach- und Vornamen aller Schüler.

Ich bin von Nachnamen in Spalte A und Vornamen in Spalte B ausgegangen.

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count = 1 And Target.Row > 1 And _
    (Target.Column = 2 Or Target.Column = 3) And Not IsEmpty(Target.Value) Then
      If Worksheets.Count < Target.Row Then _
        Worksheets.Add after:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
      If Target.Column = 2 Then
        Worksheets(Target.Row).Name = Target.Value
        Worksheets(Target.Row).Range("C1") = Target.Value
      End If
      If Target.Column = 3 Then _
        Worksheets(Target.Row).Range("H1") = Target.Value
  End If
End Sub

Du fügst das Makro unter Entwicklertools → Visual Basic → Tabelle1 (Haupttabellenblatt) ein.
Die Arbeitsmappe würde ich im .xlsm-Format speichern.

________________

Die Aufgabe lässt sich ohne grundlegende Kenntnisse in der Programmierung nicht lösen.

Du hast die Wahl: Entweder du arbeitest dich hinein oder du versuchst die Aufgabe auf dein Können umzudefinieren.

Kommentar von AndiPa ,

Dann werde ich es wohl von Hand zu Fuß machen müssen. Für mehr als einen fertigen Code einzufügen reicht es nicht.

Der Code war fast  perfekt, es fehlte nur, dass der Vorname mit übernommen wurde


Sub BlattNameausC1()
Dim wks As Worksheet
For Each wks In Worksheets
wks.Name = wks.Range("C1").Value
Next
End Sub


Irgendeine Idee, wie der Name der Blätter aus C1 (=Nachname) und H1 (=Vorname) übernommen werden kann? C1 müsste ja nur durch H1 ergänzt werden und dazwischen ein Leerschritt.

Kommentar von Suboptimierer ,

Du willst den Vornamen auch im Namen des Worksheets haben? Dann würde dein Code so aussehen:

Sub BlattNameausC1()
Dim wks As Worksheet
For Each wks In Worksheets
wks.Name = wks.Range("H1").Value & " " & wks.Range("C1").Value
Next
End Sub

(ungetestet)

Das Hauptdatenblatt wird hierdurch allerdings auch angepasst.

Kommentar von AndiPa ,

Fast perfekt. Es sollte nur noch die Reihenfolge getauscht werden, d.h. Nachname Vorname.

Vielen Dank schon mal!

Kommentar von AndiPa ,

Habe es hinbekommen. Vielen Dank!

Kommentar von Suboptimierer ,

Bitteschön!

Antwort
von Schwimmakademie, 149

kennst du dich mit Makros aus?

Kommentar von AndiPa ,

Leider nicht. Habe bis jetzt versucht lediglich einige Codes einzugeben (rechte Maustaste auf Namen des Arbeitsblattes und dann eingefügt.) Hat soweit funktioniert bis auf dass die Namen der Blätter nicht aktualisiert wurden, wenn ich den Schülernamen auf der Seite 1 geändert habe.

Kommentar von Schwimmakademie ,

probier mal bitte folgendes


Private Sub Worksheet_Change(ByVal Target As Range)

alert('hi')


End Sub

Kommentar von Schwimmakademie ,

Wenn du das machst, sollte jede Änderung einer Zelle im Blatt Namen eine Bildschirmausgabe mit dem Betreff "hi" erzeugen. Damit kannst du prüfen, ob der Code überhaubt greift :-)

Im 2. Schritt solltest du eine Schleife anlegen und die Tabelle "Namen" durcharbeiten. Dazu mehr wenn wir wissen, der Code wird benutzt


Kommentar von Schwimmakademie ,

"extras" -> "Makro" -> "VB - Code"

Dieses Fenster öffnen und auf "Namen" klicken, dort den fraglichen Code reinkopieren

Kommentar von AndiPa ,

Hallo, sorry, aber ich weiß nicht, wo ich das eingeben soll :-(

Kommentar von Schwimmakademie ,

"Menü Extras" -> "Auswahl Makro" -> " Auswahl VB - Code" (evtl auch "visual Basic"

Kommentar von AndiPa ,

Ich habe kein Menü Extras (Excel 2010)


Kommentar von Schwimmakademie ,

sorry, welche version von Excel

Kommentar von AndiPa ,

2010

Kommentar von Schwimmakademie ,

    Registerkarte Entwicklertools -> Schaltfläche Makros. Makroname "Hi"


    Schaltfläche "Erstellen"

Kommentar von AndiPa ,

Habe es gemacht, passiert aber nichts

Kommentar von AndiPa ,

Ich habe folgenden Code benutzt, mit dem alle Nachnamen aus C1 übernommen wurden.

Sub BlattNameausC1()
Dim wks As Worksheet
For Each wks In Worksheets
wks.Name = wks.Range("C1").Value
Next
End Sub

Allerdings möchte ich noch, dass die Vornamen aus H1 übernomen werden.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten