VBA: Neues Tabellenblatt richtig benennen

Hallo zusammen,

ich möchte ein Makro schreiben, welches den Benutzer nach einem Monat fragt (muss im Format MMMM YYYY, also bspw. „Januar 2016“ eingegeben werden) und anschließend ein neues Tabellenblatt erstellt, dass nach diesem Monat benannt wird, aber im Format MMMYY (also bspw. „Jan16“).

Dazu habe ich den Code geschrieben:

Sub neu()

Dim v As String
v = InputBox("Gib ein!")
v = Format(v, MMMYY)

Worksheets.Add.Name = v

End Sub

Allerdings heißt das neue Blatt dann nicht „Jan16“, sondern „01.01.2016“.

Weiß jemand, warum und wie man das Problem behebt?

Danke und Grüße!
Julian

Hallo Julian

Ich glaube, Du musst nur eine Kleinigkeit ändern: Anführungszeichen einsetzen

v = Format(v, "MMMYY")

Wichtig ist, was Du sagst: Der Benutzer darf nur „Monat Jahr“ eingeben, nicht etwa ein Datum. - Als Eingabe-Varianten sind möglich: Januar 2016 / januar 16 / jan 2016 / jan 16

Ich hoffe, das hilft Dir. Grüsse Niclaus

Super, die Anführungszeichen waren es schon!

Bezüglich der MessageBox hab ich nun eine andere Lösung gefunden. Ausgangssituation ist, dass in Spalte A ab Zeile 5 Monate nacheinander aufgelistet sind. Bei Klick auf den Button soll ein weiterer hinzugefügt und ein neues Tabellenblatt erstellt werden (es handelt sich um ein Haushaltsbuch).

Vielleicht hast du ja Lust, auf meinen Code zu schauen und mir Feedback zu geben, ob das auch eleganter geht:

Sub Neuer_Monat()

If Range("A5") = "" Or Range("A6") = "" Or Range("A7") = "" Then
    MsgBox "Das automatische Eintragen eines neuen Monats ist noch nicht möglich." & Chr(10) & "Bitte zuerst die Zellen A5, A6 und A7 manuell befüllen und danach diesen Button erneut drücken."
Else
    'Neuen Monat eintragen
    Range(Range("A5").End(xlDown), Range("A5").End(xlDown).Offset(-2, 0)).Select
    Selection.AutoFill Destination:=Range(Range("A5").End(xlDown).Offset(-2, 0), Range("A5").End(xlDown).Offset(1, 0))
    Range("A5").End(xlDown).Select
    
    'Neues Worksheet erstellen
    Worksheets("Vorlage").Copy Before:=Worksheets("Vorlage")
    ActiveSheet.Name = Format(Sheets("Ausgabenübersicht").Range("A5").End(xlDown), "mmmyy")
    ActiveSheet.Range("A1").Value = Format(Sheets("Ausgabenübersicht").Range("A5").End(xlDown), "mmmm yyyy")
End If

End Sub

Grüße!
Juli

Grüezi Julian

Das ist so eine Sache mit der Eleganz! Ich verwende heute noch Makros, die ich anfangs der 80er Jahre mit Framework/FRED erstellt hatte - Excel gab es damals noch nicht. Und jedes mal, wenn ich die anschaue, sträuben sich mir die Haare: „Wie kann man auch so umständlich und kompliziert schreiben!“

Aber es funktioniert bestens und nach meinen Wünschen und Bedürfnissen. - Wenn das bei Dir auch zutrifft, dann finde ich das ok.

Viele Grüsse und ein schönes WE Niclaus