Registriert seit: 26.03.2015
Version(en): 1997
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Steini, starte das Makro frühestens wieder am 1.1.2016.  Gruß Uwe
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
Moin, Alternative: Stelle das Systemdatum 1 Monat vor.
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Registriert seit: 26.03.2015
Version(en): 1997
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
11.12.2015, 01:22
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2015, 01:22 von Kuwer.)
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
Registriert seit: 26.03.2015
Version(en): 1997
11.12.2015, 23:51
(Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2015, 13:55 von Rabe.
Bearbeitungsgrund: Code durch 5. Button von rechts formatiert dargestellt
)
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
Registriert seit: 26.03.2015
Version(en): 1997
12.12.2015, 01:00
(Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2015, 13:54 von Rabe.
Bearbeitungsgrund: Code durch 5. Button von rechts formatiert dargestellt
)
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
Registriert seit: 26.03.2015
Version(en): 1997
Hallo,
habe eine Lösung gefunden.
Vielen Dank für jeden Hinweis.
Steini
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
der Vollständigkeit halber noch die Lösung.
Format(datum11, "mmm yyyy")
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• Steini
|