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, 00:22
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2015, 00: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, 22:51
(Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2015, 12: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, 00:00
(Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2015, 12: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
|