Autom. Umbenennen von Tabellenblätter

Hallo!

Ich habe eine Datei für das Jahr 2007/2008 mit mehreren Tabellenblättern von Aug 07 bis Juli 08. Wenn ich diese Datei kopiere, um sie für das folgenden Jahr 2008/2009 zu nutzen, sollen sich auch die Bezeichnungen der Tabellenblätter automatisch ändern.

Geht sowas?

LG

Ich habe eine Datei für das Jahr 2007/2008 mit mehreren
Tabellenblättern von Aug 07 bis Juli 08. Wenn ich diese Datei
kopiere, um sie für das folgenden Jahr 2008/2009 zu nutzen,
sollen sich auch die Bezeichnungen der Tabellenblätter
automatisch ändern.

Hi Doreen,

Alt+F11, Einfügen–Modul, Code reinkopieren, Editor schliessen.
Das Makro tt starten mit Extras–makro–Makro–Ausführen.

Das Makro geht davon aus daß 12 Blattnamen in der Form:
MMM JJ
existieren, bei diesen wird JJ um Eins erhöht, andere Blattnamen werden nicht verändert!

Option Explicit
'
Sub tt()
Dim strEing As String, Blatt As Worksheet, M As Integer
Do
 strEing = InputBox("Geben Sie einen Dateinamen ein", "Kopie speichern als...", \_
 ThisWorkbook.Name)
 If strEing = "" Then Exit Sub
Loop While strEing = ThisWorkbook.Name
ThisWorkbook.Save
ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & strEing
For Each Blatt In ThisWorkbook.Worksheets
 If Len(Blatt.Name) = 6 Then
 For M = 1 To 12
 If Left(Blatt.Name, 3) = MonthName(M, True) Then
 If Mid(Blatt.Name, 4, 1) = " " Then
 If IsNumeric(Right(Blatt.Name, 2)) Then
 Blatt.Name = Left(Blatt.Name, 4) & Right("00" & CStr(CInt(Right(Blatt.Name, 2)) + 1), 2)
 Exit For
 End If
 End If
 End If
 Next M
 End If
Next Blatt
End Sub

Gruß
Reinhard

Hallo Reinhard,
vielen Dank für Deine Hilfe. Hab trotzdem noch ne Frage.
Ich habe in folgendem Codeschnipsel den Dateinamen „Bestellplanung 2008-2009.xls“ eingegeben.

strEing = InputBox(„Geben Sie einen Dateinamen ein“, "Kopie

speichern als…", _

Was muss ich jetzt hinter „Kopie speichern als“ eintragen?
Den Namen der neuen Datei? Z.B. Bestellplanung 2009-2010? ändert er mir dann alle Tabellennamen? Und wenn ich das nächste Jahr die Datei wieder kópiere und umbenenne, muss ich dann den code auf 2001-2012 anpassen???
LG Doreen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Doreen,

Ich habe in folgendem Codeschnipsel den Dateinamen
„Bestellplanung 2008-2009.xls“ eingegeben.

strEing = InputBox(„Geben Sie einen Dateinamen ein“, "Kopie

speichern als…", _

Was muss ich jetzt hinter „Kopie speichern als“ eintragen?

nichts, war wohl missverständlich von mir formuliert, „kopie speichern als…“ ist nur dieÜberschrift=titel der erscheinenden Inputbox.

Den Nmaen den du in der Inputbox eingibst wird in der variablen strEing gespeichert und später benutzt um mittels SaveAs die datei unter diesem namen zu speichern.

Den Namen der neuen Datei? Z.B. Bestellplanung 2009-2010?
ändert er mir dann alle Tabellennamen?

Das soll er doch tun.

Und wenn ich das
nächste Jahr die Datei wieder kópiere und umbenenne, muss ich
dann den code auf 2001-2012 anpassen???

Nein, den gleichen Code starten, bei der Eingabe in der erscheinenden Inputbox dann „Bestellplanung 2001-2012“ eingeben.

Ich habe den Code mal umgeschrieben, jetzt müßtest du die Codezeile der Inputbox besser deuten können und Inputbox,SaveAs, usw wird in der Vba-Hilfe erklärt…

Gruß
Reinhard

Option Explicit
'
Sub tt()
Dim strEing As String, Blatt As Worksheet, M As Integer
Dim Aufforderung As String, Ueberschrift As String, Vorgabe As String
Aufforderung = "Geben Sie einen Dateinamen ein"
Ueberschrift = "Kopie speichern als..."
Vorgabe = ThisWorkbook.Name
Do
 strEing = InputBox(Aufforderung, Ueberschrift, Vorgabe)
 If strEing = "" Then Exit Sub
Loop While strEing = ThisWorkbook.Name
ThisWorkbook.Save
ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & strEing
For Each Blatt In ThisWorkbook.Worksheets
 If Len(Blatt.Name) = 6 Then ' Ist die Länge des Blattnamens=6 ?
 For M = 1 To 12 ' für die 12 Monate
 If Left(Blatt.Name, 3) = MonthName(M, True) Then 'Überprüfung ob dreistelliger Monatsname(MMM) gleich ist
 If Mid(Blatt.Name, 4, 1) = " " Then 'ist ein Leerzeichen zwischen MMM und JJ'
 If IsNumeric(Right(Blatt.Name, 2)) Then 'zind die beiden letzten Zeichen eine Zahl?
 ' aus Aug 07 wird Aug 08 
 Blatt.Name = Left(Blatt.Name, 4) & Right("00" & CStr(CInt(Right(Blatt.Name, 2)) + 1), 2)
 Exit For
 End If
 End If
 End If
 Next M
 End If
Next Blatt
End Sub

Hey super! Das funktioniert! Vielen lieben Dank.
Wenn ich das Makro ausführen möchte, muss ich das immer über EXTRAS machen? Oder kann ich da z.B. einen Schalter einbauen, der bei CLICK, das Makro ausführt?

Eine Frage noch:
Innerhalb des Tabellenblattes steht noch mal der Monat. Ich möchte jetzt, das der Monat in der Zelle sich mit dem Monat auf dem Tabellenblattreiter ändert. Geht das?

Vielen Dank im Voraus.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Doreen,

Wenn ich das Makro ausführen möchte, muss ich das immer über
EXTRAS machen? Oder kann ich da z.B. einen Schalter einbauen,
der bei CLICK, das Makro ausführt?

Ansicht–Symbolleisten–Formular, da die Schaltfläche anklicken und aufs Blatt ziehen, dieser Schaltfläche das Makro zuweisen.

Innerhalb des Tabellenblattes steht noch mal der Monat. Ich
möchte jetzt, das der Monat in der Zelle sich mit dem Monat
auf dem Tabellenblattreiter ändert. Geht das?

Aber der Monatsname im Blattnamen wird doch gar nicht geändert!?

Gruß
Reinhard

Innerhalb des Tabellenblattes steht noch mal der Monat. Ich
möchte jetzt, das der Monat in der Zelle sich mit dem Monat
auf dem Tabellenblattreiter ändert. Geht das?

Aber der Monatsname im Blattnamen wird doch gar nicht
geändert!?

Ja, das stimmt, habe mich doof ausgedrückt. Ich meinte natürlich das Jahr. Kann ich eine Verknüpfung auf den Blattnamen machen?

LG Doreen

Ansicht–Symbolleisten–Formular, da die Schaltfläche
anklicken und aufs Blatt ziehen, dieser Schaltfläche das Makro
zuweisen.

Das habe ich schon gemacht, aber mit dem Zuweisen klappts noch nicht richtig.LG

Hi Doreen,

Rechtsklick auf die Schaltfläche—Makro zuweisen…

In A1:A5 stehen pro Blatt Infos zum Blattnamen, kannst ja im Code die Zellen anpassen und Codezeilen die du nicht brauchst streichen.

Option Explicit
'
Sub tt()
Dim strEing As String, Blatt As Worksheet, M As Integer
Do
 strEing = InputBox("Geben Sie einen Dateinamen ein", "Kopie speichern als...", \_
 ThisWorkbook.Name)
 If strEing = "" Then Exit Sub
Loop While strEing = ThisWorkbook.Name
ThisWorkbook.Save
ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & strEing
For Each Blatt In ThisWorkbook.Worksheets
 If Len(Blatt.Name) = 6 Then
 For M = 1 To 12
 If Left(Blatt.Name, 3) = MonthName(M, True) Then
 If Mid(Blatt.Name, 4, 1) = " " Then
 If IsNumeric(Right(Blatt.Name, 2)) Then
 Blatt.Name = Left(Blatt.Name, 4) & Right("00" & CStr(CInt(Right(Blatt.Name, 2)) + 1), 2)
 Blatt.Range("A1") = MonthName(M, True)
 Blatt.Range("A2") = MonthName(M, False)
 Blatt.Range("A3") = M
 Blatt.Range("A4") = CStr(Right(Blatt.Name, 2))
 Blatt.Range("A5") = "20" & Right(Blatt.Name, 2)
 Exit For
 End If
 End If
 End If
 Next M
 End If
Next Blatt
End Sub

Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hat super geklappt!
Vielen Dank!!!