Excel Tabellenblätter automatisch umbenennen und aktualisieren?

2 Antworten

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

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!

0
@AndiPa

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.

0
@Suboptimierer

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.

0
@AndiPa

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.

1
@Suboptimierer

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

Vielen Dank schon mal!

0
@AndiPa

Habe es hinbekommen. Vielen Dank!

1

kennst du dich mit Makros aus?

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.

0
@AndiPa

probier mal bitte folgendes


Private Sub Worksheet_Change(ByVal Target As Range)

alert('hi')


End Sub

0
@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


0
@Schwimmakademie

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

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

0
@Schwimmakademie

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

0
@AndiPa

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

0
@AndiPa

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


    Schaltfläche "Erstellen"

0
@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.

0