Clever-Excel-Forum

Normale Version: Zeitraum in neuem Tabellenblattnamen mit Makro fortschreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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. Smile

Gruß Uwe
Moin,

Alternative: Stelle das Systemdatum 1 Monat vor. Blush
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 Steini,

so sollte es gehen:

Code:
Sub NeuesBlattHinzufuegen()
  Dim datDatum As Date
  Dim varDatum As Variant
  varDatum = Split(Sheets(Sheets.Count).Name, " - ")
  If UBound(varDatum) = 0 Then
    datDatum = Date
  Else
    If IsDate(varDatum(1)) Then
      datDatum = varDatum(1)
    Else
      datDatum = Date
    End If
  End If
  Sheets.Add After:=Sheets(Sheets.Count)
  Sheets(Sheets.Count).Name = Format(datDatum, "MMM YYYY") & " - " & Format(DateSerial(Year(datDatum), Month(datDatum) + 1, 1), "MMM YYYY")
End Sub

Gruß Uwe
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
Seiten: 1 2