Sitz hier an 'nem Problem dessen Beschreibung fast so schwierig ist wie dessen Lösung.
Auf dem Formular habe ich zwei Schaltflächen, die mir das Datum jeweils um 7 Tage vor bzw. zurücksetzen.(siehe Anhang)
Für mich sind aber immer nur die Freitage wichtig. Wenn ich jetzt ein beliebiges Datum in das Datumsfeld eingebe, soll das Makro automatisch
auf den kommenden Freitag springen - also quasi zum
startDatum die fehlende Anzahl von Tagen dazuzählen. Was ich im Web dazu bislang gefunden habe, war eher verwirrend statt erleuchtend.
Mein Code sieht bislang so aus:
Code:
Sub DatumHoch()
heuteDatum = Range("M1").Value
startDatum = Range("H3").Value
If startDatum < heuteDatum Then
startDatum = startDatum + 7
Else
startDatum = heuteDatum
End If
Range("H3") = startDatum
End Sub
In Voraus schon mal Danke!
Hallo,
Sub DatumHoch()
Range("H3").Value = Range("H3").Value + 6 - Range("H3").Value Mod 7
End Sub
Siehe dazu auch hier:
http://www.herber.de/excelformeln und bitte suchen .../formeln.html?welcher=372
Gruß Uwe
Irgendwie funzt es so noch nicht
Was hat denn das heutige Datum (M1) in der Rechnung zu suchen? Die ist doch nur die Obergrenze beim zählen.
und was bedeutet MOD 7 in diesem Fall.
Irgendwie muss ich doch zur Ausgabe des Zahlenwertes den entsprechen Betrag addieren bzw. subtrahieren,
Ungefähr so:
FR: 6 + 0
SA: 7 - 1
SO: 1 + 5
MO: 2 +4
DI : 3 + 3
MI : 4 +2
DO: 5 + 1
wobei die roten Zahlen ja den Zahlenwert für die einzelnen Wochentage darstellen und um die grünen muß der Wert
startDatum verändert werden.
Hallo,
habe meinen Schreibfehler korrigiert.
Gruß Uwe
Hatte ich vorhin schon ausprobiert - funktioniert aber auch nich.
Kannst Du mir kurz erklären, was das MOD 7 in der Formel bedeutet und wie ich die Ziffer für den Wochentag aus dem Makro in das Formular bekomme. Ich mach das gerade noch über die Funktion = WOCHENTAG()
Hallo,
aus der OH zur Mod-Funktion.
Zitat:Mod (Operator)
Siehe auch Beispiel Zusatzinfo
Gibt den Rest einer ganzzahligen Division zweier Zahlen zurück.
(01.05.2016, 23:40)lapunta schrieb: [ -> ]Irgendwie funzt es so noch nicht
Irgendwie muss ich doch zur Ausgabe des Zahlenwertes den entsprechen Betrag addieren bzw. subtrahieren,
Ungefähr so:
FR: 6 + 0
SA: 7 - 1
SO: 1 + 5
... und irgendwie verstehe ich deine Rechenweise nicht. Im ersten Beitrag schreibst du, dass immer auf den folgenden Freitag verwiesen werden soll. So weit, so gut. Hier aber willst du, dass am Samstag auf den vorherigen Freitag zurück gesprungen wird. Und der Sonntag, der ja nach deutscher Lesart der letzte Tag der Woche ist, springt wieder nach vorne ...
So wie du scheinbar rechnest, wäre es immer der Freitag der entsprechenden Woche im US-Format (So-Sa). Was ist nun richtig?
Zitat:So wie du scheinbar rechnest, wäre es immer der Freitag der entsprechenden Woche im US-Format (So-Sa). Was ist nun richtig?
Okay, dam mach halt aus dem 7 minus eins ein 7+6. Dann sind wir beim nächsten Freitag. Ist sinnvoller.
Aber irgendwie steh ich trotzdem auf dem Schlauch.
Was
MOD bedeutet weiß ich schon, aber wo wird in der Formel denn dividiert
Desweiteren verstehe ich nicht, warum mir Excel den richtige Zahlenwert zum Wochentag ausgibt, wenn ich die Excel Funktion
=Wochentag() verwende (Zelle J3). Und mir , wenn ich VBA
weekday benutze immer 7 ausgibt. Egal, was ich als Startdatum eingebe.
Am besten, ich hänge den Code noch mal mit dran:
Code:
Sub DatumHoch()
heuteDatum = Range("M1").Value
startDatum = Range("H3").Value
WT = Weekday(H3, [vbSunday])
Range("J3") = WT
If startDatum < heuteDatum Then
startDatum = startDatum + 7
Else
startDatum = heuteDatum
End If
Range("H3") = startDatum
End Sub
Moin,
Zitat:Was MOD bedeutet weiß ich schon, aber wo wird in der Formel denn dividiert
OK, dann hast du es gewiss nicht richtig interpretiert. Die Funktion MOD an sich beinhaltet eine Division. Hier einmal ein Auszug aus der Hilfe für VB (nicht VBA):
Zitat:Der Ausdruck a Mod b ist zu beiden der folgenden Formeln äquivalent:
a - (b * (a \ b))
Dieses war der erste Streich, und der zweite folgt sogleich (Wilhelm Busch, Max und Moritz)
Zitat:Desweiteren verstehe ich nicht, warum mir Excel den richtige Zahlenwert zum Wochentag ausgibt, wenn ich die Excel Funktion =Wochentag() verwende (Zelle J3). Und mir , wenn ich VBA weekday benutze immer 7 ausgibt. Egal, was ich als Startdatum eingebe.
Die einfachste Antwort wäre: Weil der 31. Dezember 1899 ein Samstag war. Aber damit ist dir gewiss nicht geholfen. Aber gebe mal in eine beliebige Zelle ein: =wochentag(0), dann kriegst du deine 7 als Ergebnis.
OK, das hilft dir noch immer nicht wirklich weiter. Ich habe den Fehler so gefunden:
- Erst einmal das, was ich immer mache: Die erste Zeile im Code, oberhalb der Sub ist immer Option Explicit. Damit erreichst du, dass Variablen IMMER deklariert sein müssen.
- Dann deklariere ich die Variablen, die ich auf den ersten, flüchtigen Blick sehe:
Code:
Dim heuteDatum As Date, startDatum As Date, WT As Integer
- dann gehe ich schrittweise mit F8 durch den Code.
Aber gleich zu Beginn "meckert" VBA, dass die Variable
H3 nicht deklariert ist. Also schreibe ich noch
dazu und schaue nach, was denn mit H3 los ist. In der Zeile ...
Code:
WT = Weekday(H3, [vbSunday])
... zeige ich auf die Variable H3 und stelle fest, dass der Inhalt "leer" ist. Und leer heißt für Excel Null. Und da bist du dann wieder beim ersten Experiment in Excel, mit der WOCHENTAG()-Funktion.
Vielleicht ist dir jetzt schon klar, dass eine nicht initialisierte Variable keinen gewünschten Wert hat. Und woher soll VBA auch wissen, dass du Range("H3") meinst? :16: Ideal wäre natürlich gewesen, wenn du auch die Variable verwendet hättest, welcher du gerade vorher einen (vernünftigen) Wert zugewiesen hättest:
Code:
WT = Weekday(startDatum, [vbSunday])
oder entsprechend mit
vbMonday, ganz nach Geschmack.