Clever-Excel-Forum

Normale Version: Wochentag in VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hi Günther!
Code:
Weekday(startDatum, [vbSunday])
hab ich so auch noch nicht gesehen.  Sleepy
Einigen wir uns darauf, dass es zwar funktioniert, aber "doppelt gemoppelt" ist?
Einen internen xlKonstantenwert (hier vbSunday = 1) zunächst zu evaluieren …  :05:

Gruß Ralf
Uff, erst mal vielen Dank für die erklärenden Worte.

Ich habe vorhin auch gemerkt, daß ich ja noch ein drittes Makro brauche. Unz zwar soll das ausgeführt werden, wenn ich einen beliebigen Wert in mein Feld H3 eingebe. Eigentlich soll dann ja schon das Datum auf den nächsten Freitag korrigiert werden und nicht erst, wenn ich die Befehlsschaltfläche mit den Pfeilen clicke.

Werde aber vor heute Abend nicht dazu kommen.

Ich melde mich dann wieder, wenns Probleme gibt.

Gruß aus Teneriffa.
@ Ralf:

... der Wille zur Einigung ist immer vorhanden! Angel 
Das Ganze war etwas aus der Historie des Threads heraus, ich möchte auch nicht all zu viel am erarbeiteten Code ändern. Das erfahrene Profis da eine andere Lösung finden, ist klar. Aber wenn ich mich an meine ersten Gehversuche mit VBA erinnere ... :22:
Hallo, hier bin ich wieder.

Ich hab jetzt mein drittes Makro geschrieben, welches mir auf den kommenden Freitag springt, wenn ich ein beliebiges Datum eingebe.
Funktioniert eigentlich ganz gut. - und jetzt zu dem eigentlich. Das ganze Konstrukt funktioniert nur, wenn ich mir meinen Wert für Startdatum nicht in dem Feld H3 anzeigen lasse - tue ich dies, so läuft es irgendwie in einer Schleife und Excel hängt sich auf.
Nehme ich den Befehl Range("H3") = startDatum heraus, läuft es prächtig, bloss wird mir das nächste Datum (Freitag) erst angezeigt , wenn ich auf eine Schaltflächen clicke. Etwas unschön.

Hat dafür einer eine Lösung parat.

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'Datum in H3 auf Freitag setzen

Dim heuteDatum As Date
Dim startDatum As Date
Dim nullDatum As Date
Dim WT As Integer

   If Intersect(Target, Range("H3")) Is Nothing Then Exit Sub
   
   heuteDatum = Range("M1").Value
   startDatum = Range("H3").Value
   If startDatum < nullDatum Then startDatum = nullDatum
   If startDatum > heuteDatum Then startDatum = heuteDatum
   
   Range("H3").Value = Range("H3").Value + 6 - Range("H3").Value Mod 7
   
   WT = Weekday(startDatum, [vbSunday])
   Range("J3") = WT
   
   Range("H3") = startDatum

End Sub
Hallo,

du mußt die Ereignisse ausschalten

Code:
   Application.EnableEvents = False
   Range("H3") = startDatum
   Application.EnableEvents = True
Hallo,

um ein eingegebenes Datum auf den nächsten Freitag zu korrigieren reicht eigentlich das:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Datum in H3 auf Freitag setzen


Dim WT As Integer

   If Intersect(Target, Range("H3")) Is Nothing Then Exit Sub
   Application.EnableEvents = False
   
   If Range("h3") Mod 7 <> 6 Then Range("h3") = Range("H3") + 6 - Range("h3") Mod 7
   Range("J3") = Format(Range("h3") Mod 7, "ddd")
   Application.EnableEvents = True
   
End Sub
In dem letzten Makro gibt es sowieso ein paar Ungereimtheiten:

1. ist NullDatum nirgendwo festgelegt, wäre also im Code =0
2. Value benötigt man hier nirgends.
3. wenn HeuteDatum das aktuelle Datum sein soll, dann wird das auch durch Date dargestellt.
4. H3 wird am Ende wieder auf das StartDatum gesetzt, was, weil das NullDatum fehlt, dazu führt, das am Datum nichts geändert wird. Wwarum also das ganze Makro???
Super, genauso soll es funktionieren.

Dank an alle, die mir geholfen haben und wem die Programmierung noch ein bißchen holprig erschien, der sollte bedenken, daß ich erst vor ein paar Wochen mit VBA angefangen habe.

Gruß :43: :43: :43:
Hallo,

Zitat:... und wem die Programmierung noch ein bißchen holprig erschien, der sollte bedenken, daß ich erst vor ein paar Wochen mit VBA angefangen habe.

dazu kann ich nur sagen, wehret den Anfängen, denn nichts ist beständiger als das Provisorium.
Ich weiß sehr wohl ein Klagelied mit mehreren Strophen darüber zu singen.

Beispiel:
Ich habe mich in meiner Anfangszeit der VBA-Programmierung einen feuchten Dreck darum gekümmert,
daß mir in den Foren wieder und wieder gesagt wurde: " ...laß' das .Acitivate und das .Select weg".
Ich antwortete damals ständig, für mich ist es wichtiger, das Programm zum Laufen zu kriegen.
Um den Schmuck am Nachthemd kümmere ich mich später. In einem meiner größeren Projekte
wurden die Makros dann fast überhaupt nicht mehr fertig und dann habe ich mal im Einzelschrittmodus
die ganze Sache verfolgt. Ich habe zwar lange gebraucht, um mich umzugewöhnen, habe es dann
aber doch gepackt. Seitdem bin ich aktiver Anti-Selectierer und Anti-Activierer.
Die schlimmste Arbeit war es aber, die vielen bereits bestehenden Makros zu bereinigen.

Ich könnte noch viel mehr über gemachte Fehler und den daraus resultierenden Erfahrungen schreiben,
aber es muß ja nicht sein. Eigentlich wollte ich lediglich klarmachen, daß man Fehlern nicht die Zeit zum
"Einschleifen" geben sollte. Es ist dann sehr schwer, später sein Verhalten zu ändern und zu korrigieren.
Zitat:...dazu kann ich nur sagen, wehret den Anfängen, denn nichts ist beständiger als das Provisorium.

Ich weiß sehr wohl ein Klagelied mit mehreren Strophen darüber zu singen.

Da hast Du zweifelsohne recht, aber es muß doch zumindest für mich einleuchtend sein, was ich da programmiere; und es sollte doch auch für mich verständlich sein, was mir hier im Forum geraten wird. Also ich bin der Letzte, der nicht bereit ist dazuzulernen und für jedes erklärende Wort dankbar ist.

...aber jetzt zu meinem Problem und sorry, daß ich schon wieder mit einem Anfängerproblem nerve.

Ich habe zwei Arbeitsmappen für mein Projekt: Eines für die Testphase, in der ich Makros ausprobiere und ein zweites, mit meinem Projekt.
Nach dem Übertragen der Makros in die Projektmappe, funktioniert der Datumsgenerator plötzlich nicht mehr richig. Er zeigt mir kurz das richtige Ergebnis an und verfälscht es dann wiieder.
Ich glaube, es ist ein Problem das aus der Anordnung der Makros im Projekt Explorer entsteht. Momentan habe ich alle Makros im Container Tabelle 2 oder müssen die einelnen Markros in versch. Modulen sitzen.
Hallo,

Zitat:Momentan habe ich alle Makros im Container Tabelle 2 oder müssen die einelnen Markros in versch. Modulen sitzen.

... nun kannst Du Dir aussuchen, wie wir darauf antworten sollen ... per Kristallkugel, Kaffeesatz, Karten oder Würfel.

Oder, ... :18: und das wäre wahrscheinlich schnell zielführend, Du ließest uns einen Blick in Deine Datei werfen
Seiten: 1 2 3