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

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Jakobus
Posts: 56
Joined: 01 Jul 2019, 13:26

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

13 Aug 2020, 05:33

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
User avatar
LuckyJoe
Posts: 335
Joined: 02 Oct 2013, 09:52

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

13 Aug 2020, 10:25

EnvAdd geht nur bis "days" ;-)
Herzliche Grüße aus dem Rheinland
Lucky Joe
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

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

13 Aug 2020, 10:33

"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%
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

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

13 Aug 2020, 11:13

Bei dieser Art der Berechnung gibt es nur den 1. Januar. ;)
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

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

13 Aug 2020, 23:25

Ah, ja klar. Blöd von mir. Habe ich nicht richtig hingesehen und nicht getestet!
:headwall:
Jakobus
Posts: 56
Joined: 01 Jul 2019, 13:26

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

29 Sep 2020, 03:36

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.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

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

29 Sep 2020, 04:05

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%
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

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

29 Sep 2020, 04:07

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 :)
Jakobus
Posts: 56
Joined: 01 Jul 2019, 13:26

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

29 Sep 2020, 05:03

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
User avatar
LuckyJoe
Posts: 335
Joined: 02 Oct 2013, 09:52

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

29 Sep 2020, 08:08

... oder du nimmst die Excel-Formel:

Code: Select all

SendInput, ="??." & TEXT(EDATUM(HEUTE();1);"MM") & "." & TEXT(EDATUM(HEUTE();1);"JJJJ")
Herzliche Grüße aus dem Rheinland
Lucky Joe
Jakobus
Posts: 56
Joined: 01 Jul 2019, 13:26

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

29 Sep 2020, 09:17

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
User avatar
LuckyJoe
Posts: 335
Joined: 02 Oct 2013, 09:52

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

29 Sep 2020, 09:36

Hi,

die eingestellte Sprache von Excel sollte sich so herausfinden lassen:

Code: Select all

xl := ComObjActive("Excel.Application")
msgbox % xl.International(1)
Herzliche Grüße aus dem Rheinland
Lucky Joe
Jakobus
Posts: 56
Joined: 01 Jul 2019, 13:26

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

29 Sep 2020, 10:57

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

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 24 guests