vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Geburtstagserinnerer 
Autor: jogi15
Datum: 18.06.07 11:50

Hi,

hat jemand eine Idee wie man einen gescheiten Geburtstagserinnerer prgrammieren kann?

Es soll so es funktionieren:

Option Explicit
 
' in dieser Struktur wird die
' Zeitdifferenz gespeichert
Public Type tDateDiff
  Years As Long
  Months As Long
  Days As Long
End Type
 
 
Public Function GetDateDiff(ByVal vDateBegin As Variant, _
  ByVal vDateEnd As Variant) As tDateDiff
 
  ' Hilfsvariable
  Dim vTemp As Variant
 
  ' Datums-Werte nach Typ DATE umwandeln
  vDateBegin = CDate(vDateBegin)
  vDateEnd = CDate(vDateEnd)
 
  With GetDateDiff
    .Years = 0
    .Months = 0
    .Days = 0
 
    ' Als erstes ermitteln wir die Jahre mit der DateDiff-Funktion.
    ' Da diese aber sagt, dass es 2 Jahre sind, egal ob wir z.B.
    ' von Januar 2000 bis Dezember 2002 eingeben oder
    ' von Dezember 2000 bis Januar 2002, ermitteln wir lieber die
    ' Monate.
    ' Beispiel: von "10.02.2001" bis "31.12.2003"
    .Months = DateDiff("m", vDateBegin, vDateEnd)
 
    ' Die Monate rechnen wir in Jahre plus Monate um
    .Years = Int(.Months / 12)
    .Months = .Months - (.Years * 12)
    ' Ergibt 2 Jahre und 10 Monate
 
    ' Jetzt brauchen wir noch die Tage. Dazu addieren wir unsere
    ' ermittelten Jahre zum Anfagsdatum hinzu.
    ' Beispiel: "10.02.2001" + 2 Jahre = "10.02.2003"
    vTemp = DateAdd("yyyy", .Years, vDateBegin)
 
    ' und dann die ermittelten Monate: + 10 Monate = "10.12.2003"
    vTemp = DateAdd("m", .Months, vTemp)
 
    ' Wir berechnen die Tage zwischen dem so gewonnenen
    ' Hilfsdatum und dem EndDatum.
    '  von "10.12.2003" bis "31.12.2003" = 21 Tage. Stimmt.
    .Days = DateDiff("d", vTemp, vDateEnd)
 
    ' Ist die Tagesangabe des Anfangsdatum jedoch höher als die
    ' des Enddatums, z.B. "10.02.2001" bis "01.12.2003", so
    ' bekämen wir eine negative Anzahl-Tage heraus: -9 Tage
    ' Also ziehen wir einfach von der ermittelten Anzahl-Monate
    ' einen ab und wandeln ihn in Tage um. Schon stimmt wieder
    ' alles.
    If .Days < 0 Then
      .Months = .Months - 1
      vTemp = DateAdd("yyyy", .Years, vDateBegin)
      vTemp = DateAdd("m", .Months, vTemp)
      .Days = DateDiff("d", vTemp, vDateEnd)
    End If
  End With
End Function
und das habe ich in der Prozedur geschreiben (Verwende eine andere Tabelle!!)



Dim row As Integer
 
For row = 1 To List1.RowsCount
 
vDateBegin = Format$(List1.ItemText(row, 6), "dd.mm.yyyy")
 
 
tDiff = GetDateDiff(vDateBegin, vDateEnd)
 
With tDiff
 
 
If CStr(.Months) = "0" And (CStr(.Days) <= "3") Then
MsgBox "" & List1.ItemText(1, 1) & ", " & List1.ItemText(1, 2) & " hat in " & _
  .Days & " Tag(en) Geburtstag." & vbCrLf & _
"Er wird " & .Years + 1 & " Jahre alt.", vbInformation + vbSystemModal + _
vbOKOnly, "Geburtstags-Erinnerung"
  End If
End With
 
Next row
Schon jetzt danke ich euch für euere Ideen.

Gruß

jogi15
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Geburtstagserinnerer1.189jogi1518.06.07 11:50

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel