Ecxel VBA: Wenn 6. Tabellenblatt vorhanden, soll es den Namen aus der Zelle B61 bekommen

Hallo zusammen, ich möchte meine Tabellenblätter automatisch benennen lassen nach Kalenderwochen, wobei ich nicht jeden Monat die 5.Woche benötige und somit das Tabellenblatt löschen möchte, ohne, dass ich ständig eine Fehlermeldung bekomme, weil das Makro nicht mehr funktioniert. Bisher habe ich folgendes:stuck_out_tongue:rivate Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range(„B5“).Value = „“ Then Exit Sub
Sheets(2).Name = „KW“ & Range(„B5“).Value
If Range(„B19“).Value = „“ Then Exit Sub
Sheets(3).Name = „KW“ & Range(„B19“).Value
If Range(„B33“).Value = „“ Then Exit Sub
Sheets(4).Name = „KW“ & Range(„B33“).Value
If Range(„B47“).Value = „“ Then Exit Sub
Sheets(5).Name = „KW“ & Range(„B47“).Value
If Range(„B61“).Value = „“ Then Exit Sub
Sheets(6).Name = „KW“ & Range(„B61“).Value
End Sub

Das erste Tabellenbaltt dienst zur Eingabe, die weiteren sind für die Kalenderwochen.

Wenn ich jetzt jedoch das 6.Tabellenblatt lösche funktioniert das Makro nicht mehr und bringt eine Fehlermeldung. Kann mir jemand sagen, wie es funktionieren kann?

Ich benutze Excel 2007.

Vielen Dank vorab

Gruß
Sebastian

Hallo Sebastian,

ich habe deinen Makro mal ewas eingedampft. Hiermit müsste es klappen:

Sub KW()
 Dim blatt

 For blatt = 2 To Sheets.Count
 If Range("B" & 5 + (blatt - 2) \* 14) "" Then Sheets(blatt).Name = "KW" & Range("B" & 5 + (blatt - 2) \* 14)
 Next blatt
End Sub

Gruß, Andreas

Hallo Andreas,

danke für das Makro, leider macht es jedoch nichts.

Die Zellen für die Tabellennamen sind im ersten Tabellenblatt mit dem Namen Eingabe folgende:
B5 für das zweite Tabellenblatt
B19 für Blatt 3
B33 für Blatt 4
B47 für Blatt 5
B61 für Blatt 6, wobei dieses Blatt für eine 5.KW gedacht ist, die nicht immer benötigt wird und auch löschbar sein soll, ohne dass davon das Makro eine Macke bekommt.

Ich liege doch schonrichtig, dass das Makro im Tabellenblatt „Eingabe“ reinkopiert werden soll ohne dass mein bisheriges drin stehen bleibt, oder?

Gruß
Sebastian

Sorry Sebastian,

ich hatte überlesen, dass du das ganze in einer Ereignisprozedur hast. Dann ersetze deinen Makro durch diesen hier:

Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
 Dim blatt

 For blatt = 2 To Sheets.Count
 If Range("B" & 5 + (blatt - 2) \* 14) "" Then Sheets(blatt).Name = "KW" & Range("B" & 5 + (blatt - 2) \* 14)
 Next blatt
End Sub

Ich frage mich aber, ob du den Makro wirklich jedes mal ausführen willst, wenn du in eine andere Zelle wechselst. Aber ich kenne ja deine HIntergründe nicht. Vielleicht soll es ja wirklich so sein.

Gruß, Andreas

Hallo Andreas,

Was meinst du damit, dass es immer ausführt, wenn ich in eine andere Zelle wechsel? Was wäre denn die Alternative? In meiner Tabelle berechnen sich die KW durch Eingabe eines einzigen Datums (erster Montag) in Zelle B3. Darunter sind dann Eingabefelder für die jeweiligen KW’s und in den Tabellenblättern gibt es detailiertere Ansichten und Eingaben.

Eigentlich muss es sich nur berechnen wenn ich das Datum in B3 ändere.

Aber es klappt soweit echt super :smile:

Einziges Ding ist noch, dass es eine Fehlermeldung bringt, wenn ich z.B. vom 05.05. auf den 02.06. ändere und es die KW23 schon gibt. Da es sonst doppelt wäre bringt er eine Fehlermeldung, statt es einfach alles umzubenennen. Aber das ist nicht so schlimm, dann gebe ich einfach ein späteres Datum ein und wechsel wieder zurück. Außer du kennst dafür auch noch eine Lösung, das wäre natürlich der Hammer.

Aber trotzdem schonmal vielen vielen Dank dafür, das ist echt super soweit.

Ich wünsche dir noch einen guten Tag.

Gruß
Sebastian

Hallo Andreas,

Hi Sebastian,

Was meinst du damit, dass es immer ausführt, wenn ich in eine
andere Zelle wechsel?

Dein Makro ist der Ereignismakro „Worksheet_SelectionChange“. Das hast du in deiner ersten Makrozeile so festgelegt (siehe dein Ursprungsposting).
Dieser Makro wird immer dann automatisch gestartetn, wenn du auf dem Arbeitsblatt die Auswahl änderst. Du bekommst davon vermutlich nichts mit, weil sich ja die Zahlen in den Zellen nicht bei jedem Zellenwechsel ändern und also die Blattnamen dann auch gleich bleiben. Aber der Makro wird jedes mal voll druchlaufen.

Was wäre denn die Alternative? In meiner
Tabelle berechnen sich die KW durch Eingabe eines einzigen
Datums (erster Montag) in Zelle B3. Darunter sind dann
Eingabefelder für die jeweiligen KW’s und in den
Tabellenblättern gibt es detailiertere Ansichten und Eingaben.

Eigentlich muss es sich nur berechnen wenn ich das Datum in B3
ändere.

Also, wenn ich’s richtig verstanden habe, gibst du nur in B3 ein Datum ein. Die KWs in B5, B19, B33 usw. werden dann über irgendwelche Formeln neu berechnet. Stimmt das so weit?
Dann würde es sich anbieten, den Makro nur laufen zu lassen, wenn sich der Wert in B3 ändert. Dazu gibt es die Ereignisprozedur „Worksheet_Change“. Das Makro könnte dann so aussehen:

Private Sub Worksheet\_Change(ByVal Target As Range)
 Dim blatt

 Application.EnableEvents = False
 If Target.Address = "$B$3" Then
 For blatt = 2 To Sheets.Count
 If Range("B" & 5 + (blatt - 2) \* 14) "" Then Sheets(blatt).Name = "KW" & Range("B" & 5 + (blatt - 2) \* 14)
 Next blatt
 End If
 Application.EnableEvents = True
End Sub

Aber es klappt soweit echt super :smile:

Einziges Ding ist noch, dass es eine Fehlermeldung bringt,
wenn ich z.B. vom 05.05. auf den 02.06. ändere und es die KW23
schon gibt. Da es sonst doppelt wäre bringt er eine
Fehlermeldung, statt es einfach alles umzubenennen. Aber das
ist nicht so schlimm, dann gebe ich einfach ein späteres Datum
ein und wechsel wieder zurück. Außer du kennst dafür auch noch
eine Lösung, das wäre natürlich der Hammer.

Ist sicher machbar. Dazu sind mir deine Erklärungen aber etwas zu vage. Lade mal eine Beispielmappe hoch, z.B,. hier:
http://www.file-upload.net/
Den Link, den du dort erhältst, postest du hier. Dann kann ich mir die Mappe ruterladen.

Aber trotzdem schonmal vielen vielen Dank dafür, das ist echt
super soweit.

Ich wünsche dir noch einen guten Tag.

Dito

Gruß
Sebastian

Gruß, Andreas

Hallo Andreas,

Hallo Andreas,

Hi Sebastian,

Was meinst du damit, dass es immer ausführt, wenn ich in eine
andere Zelle wechsel?

Dein Makro ist der Ereignismakro „Worksheet_SelectionChange“.
Das hast du in deiner ersten Makrozeile so festgelegt (siehe
dein Ursprungsposting).
Dieser Makro wird immer dann automatisch gestartetn, wenn du
auf dem Arbeitsblatt die Auswahl änderst. Du bekommst davon
vermutlich nichts mit, weil sich ja die Zahlen in den Zellen
nicht bei jedem Zellenwechsel ändern und also die Blattnamen
dann auch gleich bleiben. Aber der Makro wird jedes mal voll
druchlaufen.

ah ok, das wusste ich noch nicht, da ich auch noch ein Anfänger bin, was VBA angeht.

Was wäre denn die Alternative? In meiner
Tabelle berechnen sich die KW durch Eingabe eines einzigen
Datums (erster Montag) in Zelle B3. Darunter sind dann
Eingabefelder für die jeweiligen KW’s und in den
Tabellenblättern gibt es detailiertere Ansichten und Eingaben.

Eigentlich muss es sich nur berechnen wenn ich das Datum in B3
ändere.

Also, wenn ich’s richtig verstanden habe, gibst du nur in B3
ein Datum ein. Die KWs in B5, B19, B33 usw. werden dann über
irgendwelche Formeln neu berechnet. Stimmt das so weit?

ja das stimmt genau.

Dann würde es sich anbieten, den Makro nur laufen zu lassen,
wenn sich der Wert in B3 ändert. Dazu gibt es die
Ereignisprozedur „Worksheet_Change“. Das Makro könnte dann so
aussehen:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim blatt

Application.EnableEvents = False
If Target.Address = „$B$3“ Then
For blatt = 2 To Sheets.Count
If Range(„B“ & 5 + (blatt - 2) * 14) „“ Then
Sheets(blatt).Name = „KW“ & Range(„B“ & 5 + (blatt - 2) * 14)
Next blatt
End If
Application.EnableEvents = True
End Sub

Ich dabe das Makro abgeändert, das funktioniert auch. Danke.

Aber es klappt soweit echt super :smile:

Einziges Ding ist noch, dass es eine Fehlermeldung bringt,
wenn ich z.B. vom 05.05. auf den 02.06. ändere und es die KW23
schon gibt. Da es sonst doppelt wäre bringt er eine
Fehlermeldung, statt es einfach alles umzubenennen. Aber das
ist nicht so schlimm, dann gebe ich einfach ein späteres Datum
ein und wechsel wieder zurück. Außer du kennst dafür auch noch
eine Lösung, das wäre natürlich der Hammer.

Ist sicher machbar. Dazu sind mir deine Erklärungen aber etwas
zu vage. Lade mal eine Beispielmappe hoch, z.B,. hier:
http://www.file-upload.net/
Den Link, den du dort erhältst, postest du hier. Dann kann
ich mir die Mappe ruterladen.

Ich habe ein Beispiel hochgeladen. Anbei der Link: http://www.file-upload.net/download-8919747/Muster.x…

Bei der Datei handelt es sich um ein Excel 2003-Format, weil die Original-Datei das gleiche Format hat. Arbeiten kann ich jedoch mit Office 2007.

Aber trotzdem schonmal vielen vielen Dank dafür, das ist echt
super soweit.

Ich wünsche dir noch einen guten Tag.

Dito

Gruß
Sebastian

Gruß, Andreas

Vielen Dank für deine Hilfe

Gruß
Sebastian

Damit sollte es jetzt klappen:

Private Sub Worksheet\_Change(ByVal Target As Range)
Dim blatt

 Application.EnableEvents = False
 If Target.Address = "$B$3" Then
 For blatt = 2 To Sheets.Count
 Sheets(blatt).Name = "Dummy" & blatt
 Next blatt
 For blatt = 2 To Sheets.Count
 If Range("B" & 5 + (blatt - 2) \* 14) "" Then Sheets(blatt).Name = "KW" & Range("B" & 5 + (blatt - 2) \* 14)
 Next blatt
 End If
 Application.EnableEvents = True
End Sub

Gruß, Andreas

Hallo Sebastian,

Hallo zusammen, ich möchte meine Tabellenblätter automatisch
benennen lassen nach Kalenderwochen,

in manchen Jahren entspricht =Kalenderwoche(„Datum“) nicht der deutschen DIN-Norm, schau mal da:
http://www.excelformeln.de/formeln.html?welcher=7

Bei Bedarf als Vba-Codeschnipsel sicher auch leicht findbar im I-Net oder frage hier nach wenn du nix findest. Dann steht in B5 halt =MeineKW(B3) und die selbst geschriebene Fktn. „MeineKW“ berechnet gemäß der Formel von excelformeln.de.

Kommste jetzt mit dem letzten Tipp von Andreas hin? Wenn nicht müßte man m.E. das ganze noch mal neu angehen im Sinne von genauer nachfragen was was wie du eigentlich vorhast.

Gruß
Reinhard

Hallo Andreas,

wow, perfekt. Ich bin beeindruckt. :smile:

Vielen vielen Dank, das hilft mir sehr weiter.

Ich hoffe es war nicht zu viel Mühe für dich.

Ich wünsche dir noch eine tolle restliche Woche

Gruß
Sebastian

OT: Schön, dassde wieder da bist
dachte schon du hättest das sinkende W-W-W-Schiff verlasseen.

Gruß, Andreas

…ja ich dachte auch, Du bist „stiften“, schön, dass Du wieder da bist.
Gruß - Wolfgang

Hallo Reinhard,

ja mit dem letzten Tipp von Andreas komme ich super klar. Und danke für den Tipp mit der Kalenderwoche. Das schau ich mir mal genauer an und ändere die Kalenderwochenformeln dann ab.

Gruß
Sebastian

OT Danke …
… an dich und Andreas für die Sorge um mich und eure Beiträge, erfreut(e) mich sehr.

Lieben Gruß
Reinhard