Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Wochentag in VBA
#1
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!


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#2
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
Antworten Top
#3
Irgendwie funzt es so noch nicht Huh 

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 +
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.
Antworten Top
#4
Hallo,

habe meinen Schreibfehler korrigiert.

Gruß Uwe
Antworten Top
#5
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()
Antworten Top
#6
Hallo,

aus der OH zur Mod-Funktion.

Zitat:Mod (Operator)
Siehe auch Beispiel Zusatzinfo

Gibt den Rest einer ganzzahligen Division zweier Zahlen zurück.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#7
(01.05.2016, 23:40)lapunta schrieb: Irgendwie funzt es so noch nicht Huh 

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?
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!
Antworten Top
#8
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 Huh

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


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#9
Hallo,

(02.05.2016, 10:52)lapunta schrieb: Was MOD bedeutet weiß ich schon, aber wo wird in der Formel denn dividiert Huh

hier
Code:
Range("H3").Value Mod 7
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#10
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) Blush
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

Code:
Dim H3

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.
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!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste