Hallo,
mit einem Makro möchte ich den Namen eines Tabellenblattes ändern
und verwende bisher:
...
ActiveSheet.Name = Format(Date, "MMM YYYY") + " - " + Format(DateSerial(Year(Now()), Month(Now()) + 1, 1), "mmm yyyy")
...
Ich erhalten dann: Dezember 2015 - Januar 2016
Wie muss ich den Code ändern bzw. das Makro ergänzen,
damit bei Neuanlage eines Tabellenblattes der folgende Zeitraum als Name
eingetragen wird, also dann
Januar 2016 - Februar 2016 ?
Bisher erhalte ich bei der Neuanlage mit diesem Makro die sinngemäße Fehlermeldung, dass für ein neues Tabellenblatt
kein bereits vorhandener Name verwendet werden kann.
Weiß jemand Rat?
Bin für jede Hilfe dankbar!
Steini
Hallo Steini,
starte das Makro frühestens wieder am 1.1.2016.
Gruß Uwe
Moin,
Alternative: Stelle das Systemdatum 1 Monat vor.
Hallo Günter, hallo Uwe,
vielen Dank für eure Hinweise.
Mit dem Makro soll stets ein neues Tabellenblatt mit der Folgeperiode angelegt werden:
Also Anlage neues Tabellenblatt mit Namen Dezember 2015 - Januar 2016,
nächstes neues Tabellenblatt mit Namen Januar 2016 - Februar 2016 usw. usf.
Mein Gedanke ist, dass mit dem Aufruf des Makros auf den Zeitraum des letzten Blatts Bezug genommen wird
und die Monate dort um jeweils eins erhöht werden.
Wäre dies umsetzbar (bspw. mit dateadd?, Bezug mit previous??)?
Besten Dank schonmal
Steini
Hallo Uwe,
vielen Dank für diesen Ansatz. Da ich noch eine ganz alte Excel-Version verwende - Excel97 -, kann ich ihn
leider nicht umsetzen, da die Funktion "split" dort noch nicht zur Verfügung steht.
Allerdings habe ich nun in einem Makro die Daten des Zeitraumes als jeweils eigene Variable berücksichtigt
und kann nun damit die Daten des vorherigen Tabellenblattes in das aktuelle Blatt schreiben.
Code:
Option Explicit
Sub Folgedatum()
Dim datum1 As Date
Dim datum2 As Date
Dim blattname As String
With ActiveSheet
If .Index > 1 Then
blattname = .Previous.Name
End If
End With
datum1 = Left(blattname, 8)
datum2 = Right(blattname, 8)
ActiveSheet.Name = datum1 & "bis" & datum2
End Sub
Was noch nicht klappt ist, die Folgedaten anstelle der Daten des vorherigen Blattes zu setzen,
also jeweils den Folgemonat abzubilden.
Bspw.
datum1=Format(DateSerial(Year(Now()), Month(Now())+1, 1), "mmm yyyy")
funktioniert nicht.
Wie müsste der Code geändert werden, damit immer der Folgemonat gesetzt wird?
Freue mich über jeden Tipp.
Steini
Hallo,
wie müsste der folgende Code geändert werden,
damit die Daten (Variablen datum11 und datum21) im Format mmm yyyy (also bsp. Dez 2015) angezeigt werden?
Code:
Option Explicit
Sub Folgedatum()
Dim datum1 As Date
Dim datum2 As Date
Dim datum11 As Date
Dim datum21 As Date
Dim blattname As String
With ActiveSheet
If .Index > 1 Then
blattname = .Previous.Name
End If
End With
datum1 = Left(blattname, 10)
datum2 = Right(blattname, 10)
datum11 = DateAdd("m", 1, datum1)
datum21 = DateAdd("m", 1, datum2)
ActiveSheet.Name = datum11 & " bis " & datum21
End Sub
Danke
Steini
Hallo,
habe eine Lösung gefunden.
Vielen Dank für jeden Hinweis.
Steini
Hallöchen,
der Vollständigkeit halber noch die Lösung.
Format(datum11, "mmm yyyy")
Hallo,
auch der Vollständigkeit halber:
Code:
Public Function Split(strText As String, strDelimiter As String) As Variant
'simuliert die ab E2000 verfügbare Funktion Split für E97
'Kuwer 201512
Dim iTemp As Long, varTemp As Variant
iTemp = (Len(strText) - Len(Application.WorksheetFunction.Substitute(strText, strDelimiter, ""))) / Len(strDelimiter)
ReDim varTemp(iTemp)
If iTemp = 0 Then
varTemp(0) = strText
Else
For iTemp = 0 To UBound(varTemp) - 1
varTemp(iTemp) = Mid(strText, 1, InStr(1, strText, strDelimiter) - 1)
strText = Mid(strText, Len(varTemp(iTemp)) + Len(strDelimiter) + 1)
Next iTemp
varTemp(iTemp) = strText
End If
Split = varTemp
End Function
Gruß Uwe