Page 1 of 1

Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 13 Aug 2020, 05:33
by Jakobus
An die Freunde von Autohotkey.

Der Code unten schreibt mit der Tastenkombination STRG + ? folgenden Text in eine Excelzelle: ??.08.2020

Gewünscht ist eine Anpassung,
die statt ??.08.2020 einfach den nächsten Monat ??.09.2020 in der Zelle einträgt.

Die Schwierigkeit dabei ist der Jahreswechsel.
D.h. wenn ich irgendwann im Dezember STRG + ? drücke,
dann sollte ??.01.2021 und nicht ??.13.2020 in Zelle stehen.

Weiß jemand,
an welcher Stelle im Code welche Anpassung erfolgen muß?

Vielen Dank für die Hilfe im Voraus.

Code: Select all

; Schreibe aktuellen Monat in einen Excelzelle "??.08.2020" durch STRG + ß (ß steht für ?)
	
#IfWinActive, ahk_exe EXCEL.EXE 				; Führe das Script nur in Excel aus
												
~^ß::											; STRG + ß < steht eigentlich für STRG  ?
	
Heute = %A_Now%									; Schreibe das aktuelle Datum in die Variable Heute
FormatTime, Heute, %Heute%, MM.yyyy				; Formatiere die Datumsanzeige wie folgt: 08.2020
Send, ??.%Heute%{Right} 						; Gibt das Ergebnis aus z.B ??.08.2020 und spinge in die nächste Excelzelle nach rechts
	
Heute =											; Variable Heute löschen

return

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 13 Aug 2020, 05:43
by BoBo

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 13 Aug 2020, 10:25
by LuckyJoe
EnvAdd geht nur bis "days" ;-)

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 13 Aug 2020, 10:33
by just me
"Days" reicht locker, um in den nächsten Monat zu kommen:

Code: Select all

JAMO := A_YYYY . A_MM     ; AHK hängt für Datumsberechnungen 01000000 automatisch an
JAMO += 31, D             ; in den nächsten Monat wechseln
FormatTime, Datum, %JAMO%, '??'.MM.yyyy
MsgBox, %Datum%

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 13 Aug 2020, 10:42
by haichen
Ende Januar geht das aber schief..

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 13 Aug 2020, 11:13
by just me
Bei dieser Art der Berechnung gibt es nur den 1. Januar. ;)

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 13 Aug 2020, 23:25
by haichen
Ah, ja klar. Blöd von mir. Habe ich nicht richtig hingesehen und nicht getestet!
:headwall:

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 29 Sep 2020, 03:36
by Jakobus
Sorry - für die verspätete Antwort. Bin wieder zurück.

Leider reichen meine Programierkenntnisse weniger weit wie der klare Blick von just me.

Gäbe es eine Möglichkeit, den Monat aus dem aktuellem Datum herauszuschneiden?
Diesen um 1 erhöhen UND sollte das Ergebnis im Dezember (Monat+1 = 12+1=13) gleich 13 sein,
dann das Ergebnis auf 1 zurücksetzen.

Danach das neue Ergebnis verknüpfen mit "??" UND "Monat+1" UND "YYYY"
So die Idee.

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)  Topic is solved

Posted: 29 Sep 2020, 04:05
by just me
Moin,

warum willst Du es unbedingt händisch machen? Du musst dann auch beachten, dass Du in das nächste Jahr rutschst, wenn der aktuelle Monat Dezember ist:

Code: Select all

YYYY := A_YYYY
MM := A_MM
If (MM < 12)
   MM += 1
Else {
   MM := 1
   YYYY += 1
}
Datum := Format("??.{:02}.{:04}", MM, YYYY)
MsgBox, %Datum%

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 29 Sep 2020, 04:07
by BoBo

Code: Select all

Datum := 20201231235959													; get into next month by adding a single second
Datum += 1, seconds
MsgBox % Datum

F12::																	; press F12
	Random, month, 1, 12												; get random month
	date := 2020 . Format("{:02}", month)								; create valid date 'YYYYMM' string
	date += 31, days													; add 31 days
	MsgBox % Format("{:02}", month) "`n" newMonth := SubStr(date,5,2)	; dispaly pre calcualtion month/ post calcualtion month
	FormatTime, str,% date, '??'.MM.yyyy
	MsgBox % str
	Return
Konzept. Erfüllt mit etwas Gefrickel AKA Eigenleistung deine Anforderung. Good luck :)

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 29 Sep 2020, 05:03
by Jakobus
Genial gut.

Danke Just me und
danke an BoBos Alternative.

Habe mich für die Lösung von Just me entschieden
und sie für Excel entsprechend angepasst.

Code: Select all

; Erstelle in Excel "??.N+1.2020" durch STRG + ´
	
#IfWinActive, ahk_exe EXCEL.EXE 				; Führe das Script nur in Excel aus
												
~^´::											; STRG + ´ (Eine Taste weiter rechts neben der Taste mit dem ?)
	
YYYY := A_YYYY									; Setze aktuelles 4-stellige Jahr (z. B. 2020). A_Year enthält denselben Wert.
MM := A_MM										; Setze aktuellen 2-stellige Monat (01-12). A_Mon enthält denselben Wert.
If (MM < 12)									; Falls 2-stelliger Monat kleiner als 12 dann erhöhe 2-stelligen Monat um +1
   MM += 1
Else {											; Sonst
   MM := 1										; setzte 2-stelligen Monat auf 1 (im Dezember)
   YYYY += 1									; und erhöhe das 4-stellige Jahr um eine +1 (z. B. 2021)
}
N1 := Format("??.{:02}.{:04}", MM, YYYY)		; Verknüpfe alles zusammen "??.MM.YYYY" mit den Punkten
Send, %N1%{Right}								

N1 =											; Variable N1 löschen

return

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 29 Sep 2020, 08:08
by LuckyJoe
... oder du nimmst die Excel-Formel:

Code: Select all

SendInput, ="??." & TEXT(EDATUM(HEUTE();1);"MM") & "." & TEXT(EDATUM(HEUTE();1);"JJJJ")

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 29 Sep 2020, 09:17
by Jakobus
Hallo LuckyJoe,

Danke für die gelungene Umsetzung.
In meinem besonderen Fall bleibt die Lösung von Just me die bevorzugte Variante.

- Weil?
Weil Excel sowohl in Englisch als auch in Deutsch im Gebrauch ist
und die Variante von Just me auf beiden Excel Versionen läuft.


Für Deine Lösung müsste ich wissen,
wie man in Autohotkey die Sprache der Software (bzw. des Rechners) abfragen kann.

Genau dafür (!) wollte ich später eine separate Anfrage starten.
Um in Abhängigkeit der Menu-Sprache in Excel das jeweilige Script auszuführen.

Beispiel:

Wenn Excel in Deutsch dann

Code: Select all

#IfWinActive, ahk_exe EXCEL.EXE 				; Führe das Script nur in Excel aus							
~^´::											; STRG + ´ (Eine Taste weiter rechts neben der Taste mit dem ?)
SendInput, ="??." & TEXT(EDATUM(HEUTE();1);"MM") & "." & TEXT(EDATUM(HEUTE();1);"JJJJ") 	; Excel in Deutsch
return
Und wenn Excel in Englisch dann

Code: Select all

#IfWinActive, ahk_exe EXCEL.EXE 				; Führe das Script nur in Excel aus							
~^´::											; STRG + ´ (Eine Taste weiter rechts neben der Taste mit dem ?)
SendInput, ="??." & TEXT(EDATE(TODAY();1);"MM") & "." & TEXT(EDATE(TODAY();1);"JJJJ")	; Excel in Englisch
return

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 29 Sep 2020, 09:36
by LuckyJoe
Hi,

die eingestellte Sprache von Excel sollte sich so herausfinden lassen:

Code: Select all

xl := ComObjActive("Excel.Application")
msgbox % xl.International(1)

Re: Monat vom aktuellem Datum um einen Wert erhöhen - d.h den nächsten Monat anzeigen (N+1)

Posted: 29 Sep 2020, 10:57
by Jakobus
Top!
Danke LuckyJoe

Hier die Umsetzung in Abhängigkeit der Menu-Sprache von Excel (ob ENGLISCH oder DEUTSCH)

Code: Select all

; Erstelle in Excel "??.N+1.2020" durch STRG + ´ 													in Abhängigkeit der Menuesprache in Excel (ob ENGLISCH oder DEUTSCH))
	
#IfWinActive, ahk_exe EXCEL.EXE 																	; Führe das Script nur in Excel aus
												
~^´::																								; STRG + ´ (Eine Taste weiter rechts neben der Taste mit dem ?)
	
xl := ComObjActive("Excel.Application")																; Ermittelt ein laufendes Objekt, das mit OLE registriert wurde.
; msgbox % xl.International(1)																		; 

If (xl.International(1) = 1.000000)																	; Ist der Wert=1.000000 dann ist Excel in Englisch. Ist der Wert=49.000000 dann ist Excel in Deutsch
   SendInput, ="??." & TEXT(EDATE(TODAY();1);"MM") & "." & TEXT(EDATE(TODAY();1);"JJJJ"){Enter}		; Excel in Englisch
   
Else {																								; Sonst
   SendInput, ="??." & TEXT(EDATUM(HEUTE();1);"MM") & "." & TEXT(EDATUM(HEUTE();1);"JJJJ"){Enter} 	; Excel in Deutsch
   
   }
xl =																								; Variable xl löschen

return