Datumsbereich prüfen

Tach Community,

ich habe die Aufgabe bekommen „mal eben schnell“
ein Visual Basic 6.0 script zu erweitern. Ich habe
Null (!!!) plan von VB … ich nutze noch nicht mal makros…
*schwitz* bin eigentlich in JAVA und PHP zuhause.

nun die aufgabe…
dieses arbeitsblatt fungiert als eine art validator.
er ruft ein 2. .xls auf… und validiert dort benutzereingaben nach diversen kriterien. nun soll ich in 2 feldern einen datumsbereich validieren. ich habe keinen plan wie ich das angehen soll.

also… zelle a1 = 01.01.2006 Zelle a2=03.02.2006
das soll jetzt mal der datumsbereich sein.
alles was sich ausserhalb befindet sollte false zurueckgeben.

wie zum teufel mach ich das ? gibts da schon fertige bibliotheken?

kann mir jemand nen snippet zur verfuegung stellen? ich werde wohl erstmal nicht mehr mit VB in kontakt kommen … deshalb lohnt sich das jetzt nicht dicke buecher zu lesen…

waere super schoen, wenn mir jemand auf die spruenge helfen kann…
die syntax find ich irgendwie noch nicht so eingaengig…

danke vielmals…

PixelKoenig

Hallo,

von VBA habe ich keine Ahnung, aber Du fragst ja nach VB.

also… zelle a1 = 01.01.2006 Zelle a2=03.02.2006
das soll jetzt mal der datumsbereich sein.
alles was sich ausserhalb befindet sollte false zurueckgeben.

Geht es Dir nur darum, wie Du mit dem datum umgehst? Dazu habe ich Dir in ein Beispiel zwei Möglichkeiten geschrieben, die Variante mit Select Case wird für Dich die Passende sein, vermute ich:

Option Explicit

 Dim dt1 As Date
 Dim dt2 As Date
 Dim dt3 As Date

Private Sub Command1\_Click()
 Command1.Caption = DateDiff("d", dt1, dt2) 'gibt die Differenz in Tagen aus
End Sub

Private Sub Command2\_Click()
 Select Case dt3
 Case dt1 To dt2 'prüft ob das Datum 3 zwischen 1 und 2 liegt
 Command2.Caption = "passt"
 Case Else
 Command2.Caption = "passt nicht"
 End Select
End Sub

Private Sub Form\_Load()
 'Beispieldaten in Variablen schreiben
 dt1 = "01.02.2007"
 dt2 = "01.03.2007"
 dt3 = "15.02.2007"
End Sub

Gruß, Rainer

hi…
danke erstmal…

ich kann deinem code nicht ganz folgen–>

Option Explicit

was bewirkt das genau? das habe ich noch nicht gesehen.
ist das ausserhalb von klassen oder methoden wirksam ?

auch der rest ist mir nicht so ganz klar.
du schreibst das ergebnis in den button.

irgendwie kann ich das noch nicht anpassen.

kannst du mir ein beispiel stricken,
dass einen datumswert aus arbeitsblatt1!c1 und arbeitsblatt1!c2
holt… und die dann berechnet… ?
die ausgabe mache ich vorerst noch per msgBox()

ich komme damit noch nicht so ganbz klar.
nur noch mal am rande… mir fehlen hier generell die basics…
excel und word hab ich so gut wie nie genutzt. das hoechste der gefuhele waren mal ein paar nette formeln innerhalb von excel… aber VB hab ich nie gesehen… *jammer*

danke fuer die muehe

grusz

pixelKoenig

Hallo,

ich kann deinem code nicht ganz folgen–>

OK, dann ändern wir das. :smile:

Option Explicit

was bewirkt das genau?

Damit wird vorgeschrieben, daß alle Variablen deklariert werden müssen. Andernfalls ist das in VB nicht unbedingt erforderlich, das kann aber zu Problemen führen, speziell Tippfehler fallen so auf, weil sie als Fehler angezeigt werden können. Beispiel:
Siehst Du den Unterschied?

Fl F1

Da würde das System dann melden daß die Variable nicht deklariert ist.

das habe ich noch nicht gesehen.
ist das ausserhalb von klassen oder methoden wirksam ?

auch der rest ist mir nicht so ganz klar.
du schreibst das ergebnis in den button.

Nur um überhaupt etwas damit zu machen.

irgendwie kann ich das noch nicht anpassen.

kannst du mir ein beispiel stricken,
dass einen datumswert aus arbeitsblatt1!c1 und
arbeitsblatt1!c2
holt… und die dann berechnet… ?

Nein, das ist Excel-VBA. Wie man mit Arbeitsblättern umgeht, weiß ich nicht. Ich kann nur VB. Ich habe keine Ahnung, wie Du den Wert aus dem Arbeitsblatt lesen musst. Ich bin heute auch leider nicht in der Firma, privat habe ich kein Excel um mal zu probieren. Aus dem Kopf, ohne Test bekomme ich mit VBA gar nichts hin. :frowning: Sorry. Der Code ist VB, nicht VBA.

Gruß, Rainer

tach again :smile:

Nein, das ist Excel-VBA. Wie man mit Arbeitsblättern umgeht,
weiß ich nicht. Ich kann nur VB. Ich habe keine Ahnung, wie Du
den Wert aus dem Arbeitsblatt lesen musst. Ich bin heute auch
leider nicht in der Firma, privat habe ich kein Excel um mal
zu probieren. Aus dem Kopf, ohne Test bekomme ich mit VBA gar
nichts hin. :frowning: Sorry. Der Code ist VB, nicht VBA.

ok…
hmmm…
also… ich habe deinen code fuer meine zwecke manipuliert…
jedoch wird mir noch nicht so ganz klar…
wie hier die methoden aufgerufen werden und was da in der case anweisung passiert…

erstmal so grundsaetzlich… sehe ich das richtig?
sobald ich eine methode mit einem „_click“ versehe
wird diese automatisch einem button mit methodennamen zugewiesen… richtig?

wenn ja … dann hast du zwei methoden fuer zwei buttons geschrieben… und da stockts gerade bei mir.

ok. kein vba… kein problem… mir reichts vorerst schon, wenn du mir mal folgendes beispiel stricken koenntest… :

d1 = "01.01.2006"
d1 = "01.02.2006"
userDatum = "10.02.2006"

Private Sub validateDatum(userDatum)
 [...schlauerCode]
 'validiere userDatum mit zeitraum zwischen d1 und d2
 'true = userDatum liegt innerhalb d1 und d2
 'return [true|false]
 [/...schlauerCode]
End Sub

'hier methoden aufruf validateDatum(userDatum)
if(validateDatum(userDatum)==true)
 msgBox("valide")
End if

das in einer perfekten yntax und ich bin gluecklich :smiley:
den rest finde ich schon raus.

merci nochmal fuer deinen hirnmissbrauch *grins

grusz

PixelKoenig

Hallo,

um mit VBA an den Inhalt der Zellen zu kommen, könnte Dir der Beitrag hier …
http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…
… ein paar Zeilen weiter unten helfen.

Gruß, Rainer

Hallo,

also… ich habe deinen code fuer meine zwecke manipuliert…
jedoch wird mir noch nicht so ganz klar…
wie hier die methoden aufgerufen werden und was da in der case
anweisung passiert…

erstmal so grundsaetzlich… sehe ich das richtig?
sobald ich eine methode mit einem „_click“ versehe
wird diese automatisch einem button mit methodennamen
zugewiesen… richtig?

Nein. VB und VBA arbeiten mit Objekten und Ereignissen. Ein Objekt kann zum Beispiel ein Schaltknopf (Commandbutton) oder eine Picturebox … sein. verwendest Du so ein Steuerelement, wird der Eventhandler angewiesen, die Ereignisse für diese Steuerelemente auszuwerten und falls vorhanden, die entsprechenden, dazugehörigen Prozeduren zu starten. Bei einem Commandbutton ist das üblicher Weise das Klick-Ereignis, das man mit der Maus durch anklicken auslöst. Wenn Dein Code dann eine Prozedur ‚CommandButton_Click…‘ enthält, wird diese vom Eventhandler gestartet. Das was in dieser Prozedur steht, wird also ausgeführt, wenn der Anwender auf den Button klickt.
Es gibt noch jede Menge andere Ereignisse, wenn Du im Editorfenster von VB mal oben rechts das Combo-Feld öffnest, wird Dir angezeigt, welche Ereignisse für das gerade ausgewählte Objekt von Eventhandler geprüft werden, welche Du auswerten kannst. Das ist unterschiedlich, eine Liste hat z.B. ein Scrollereignis, ein Label nicht.

wenn ja … dann hast du zwei methoden fuer zwei buttons
geschrieben… und da stockts gerade bei mir.

Ja, genau so. Womit hast Du da ein Problem? Klicke ich auf den ersten Button, wird die Differenz in Tagen zwischen dem ersten und dem letzen Datum berechnet und angezeigt. Das habe ich geschrieben um Dir zu zeigen, wie man die Differenz aus zwei Datumsangaben berechnet, falls Du das möchtest.

ok. kein vba… kein problem… mir reichts vorerst schon, wenn
du mir mal folgendes beispiel stricken koenntest… :

OK, ich schreibe direkt in Deinen Code.

Vergiss nicht, alle drei Variablen als Datum zu deklarieren, sonst läuft der Code nicht!!!

d1 = "01.01.2006"
d1 = "01.02.2006"
userDatum = "10.02.2006"

Private Function validateDatum(ByVal Datum As Date) As Boolean
 'Hier kannst Du nicht noch einmal userDatum verwenden, das ist schon deklariert. 
 '[...schlauerCode]
 Select Case Datum
 'validiere userDatum mit zeitraum zwischen d1 und d2
 Case d1 to d2 
 'true = userDatum liegt innerhalb d1 und d2
 ValidateDatum = True
 Case Else
 'return [true|false]
 ValidateDatum = False
 End Select 
 '[/...schlauerCode]
End Function

'hier methoden aufruf validateDatum(userDatum)
If validateDatum (userDatum) =true Then
 MsgBox("valide")
End if

das in einer perfekten sntax und ich bin gluecklich :smiley:
den rest finde ich schon raus.

OK so?

Gruß, Rainer

hi again.

Nein. VB und VBA arbeiten mit Objekten und Ereignissen. Ein

[…]

ahh… vielen dank fuer die erklaerung…

-)

Ja, genau so. Womit hast Du da ein Problem?
[…]

mja… erstmal so grundsaetzlich mit der struktur…
bin ja noch nicht so fit… das hatte bei mir irgendwie nicht funktinoiert…
aber ich lerne ja dabei :smile:

OK, ich schreibe direkt in Deinen Code.
OK so?

bin jetzt selbst mobil.
teste das zuhause. sieht auf jeden fall ziemlich schick aus :smile:
und sollte genau das sein , was ich brauche…
ich danke dir ganz herzlich :smile:

mein entwicklerstatus ist gerettet …
*grins*
"mach mal eben schnell was in vba… excel ist doch pillepalle … "
scheisse… wenn man da mal „schnell“ ja sagt …

danke fuer die muehe

PixelKoenig