Geburtstage ausgeben

  • Excel

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von PascalN.

    Geburtstage ausgeben

    Hallo ihr!

    Mein Name ist Jana und ich sitze grade an einem kleinen Programmentwurf, bei dem ich nicht mehr so richtig weiterweiß. Ich habe die Suchfunktion verwendet, aber leider nichts passendes gefunden. Kann mir einer von euch vielleicht einen kleinen Tipp geben oder mir sagen, ob sowas ähnliches schonmal behandelt wurde?

    Ich muss dazu auch sagen, dass ich absoluter Neuling auf dem Gebiet bin und vom Skripten nicht viel Ahnung habe. Ich schätze, meine Frage ist so einfach, dass bislang noch keiner auf die Idee gekommen ist, sie zu stellen *rotwerd*

    Der Entwurf soll bei jedem Öffnen einer Mappe mit einer Reihe von Kundendaten (Anrede, Name, Telefonnummer, Geburtstag, Geburtsjahr) die aktuelle Tabelle auf die aktuellen Geburtstagskinder durchsuchen. Gibt es Übereinstimmungen zwischen dem aktuellen Datum und dem Geburtstag, soll eine Userform ausgegeben werden, in der Anrede, Name, Telefonnummer und das Alter ("Herr xx wird heute xx Jahre alt") in einer Art Tabelle aufgelistet ist.

    Mit viel Mühe und Not habe ich es bis jetzt hinbekommen, die aktuellen Geburtstagskinder als Variablen abzuspeichern und in einer MsgBox auszugeben. Meine Fragen sind jetzt:

    1. Wie bekomme ich die gefoderten Daten jedes Kunden in die UserForm und was verwende ich dazu am besten? Eine Listbox? Eine Combobox?
    2. Wie kann ich am besten einbinden, dass das Skript das Alter des Gratualten ausrechnet?

    Mein bisheriger Entwurf (mit der MsgBox)

    Visual Basic-Quellcode

    1. Dim Datum As Date
    2. Dim Zeile As Long
    3. Dim Namen As String
    4. Private Sub Workbook_Open()
    5. Zeile = 2
    6. Do Until IsEmpty(Cells(Zeile, 3))
    7. Datum = Cells(Zeile, 3)
    8. With Range(Cells(Zeile, 1), Cells(Zeile, 3))
    9. If CDate(Day(Datum) & "." & Month(Datum) & "." & Year(Date)) = Date Then
    10. .Interior.ColorIndex = xlNone
    11. Namen = Namen & Cells(Zeile, 1) & " " & Cells(Zeile, 2) & vbLf
    12. Else
    13. End If
    14. End With
    15. Zeile = Zeile + 1
    16. Loop
    17. If Namen <> "" Then
    18. MsgBox Namen, vbInformation, "Heute haben Geburtstag:"
    19. Else
    20. MsgBox "", vbExclamation, "Heute liegt kein Geburtstag an!"
    21. End If
    22. End Sub


    Ich bin auch bereit den bisherigen Programmcode zu überarbeiten, wenn das Ding dann endlich funktioniert ;)

    Kann mir jemand weiterhelfen?


    LG

    Jana

    * topic verschoben *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Sry wenn ich mich unklar ausgedrückt habe...

    Das ganze soll eine Exel-Datei sein, in der die Kunden mit Anrede, Vorname, Name, Telefonnummer und Geburtstag eingetragen werden. Ich muss jetzt ein VBAProject schreiben, das jedesmal, wenn die Exel-Datei geöffnet wird, alle Einträge nach aktuellen Geburtstagen durchsucht und die gefundenen Geburtstage in einer Userform darstellt, in der dann steht "Herr xx, Telefonnummer xxxx, hat heute Geburtstag und wird xx Jahre alt". Wenn mehrere Übereinstimmungen gefunden wurden, werden diese untereinander angezeigt.

    Bis jetzt hab ich hinbekommen, dass Namen, Anrede und Telefonnummer der Gratulanten untereinander in einer Msgbox angezeigt werden. Jetzt meine Frage: Wie bekomme ich die statt in eine Msgbox in eine Listbox?
    Pseudocode

    Quellcode

    1. Für jeden der heute Geburtstag hat
    2. ListBox1.Items.Add(item.Anrede & " " & item.Name & " hat heute Geburtstag und wird " & CStr(item.Geburtstag.Year - Now.Year) & " alt.")

    Wobei 'item' ein Datensatz oder wenn man so will eine 'Person' ist. und halt soviel mal, wie Leute am heutigen Tag Geburtstag haben.
    Stichwort: For Each


    Gruss
    Pascal
    Danke, Pascal! Ich habe deinen Code übernommen und leicht abgeändert als Tastenbelegung in meiner UserForm verwendet. Jetzt kann ich sämtliche Geburtstage auslesen - Auf Knopfdruck. Kannst du mir auch sagen, wie ich es einrichten kann, dass meine UserForm selbstständig anfängt zu suchen, sobald sie geöffnet wird? Hab leider keine Ahnung, wie ich das machen soll, und im Inet findet sich auch nichts, was meinem langsamen Kopf auf die Sprünge helfen könnte ;(

    Mein bisheriges Programm, als eine Funktion an einen CommandButton in meiner UserForm gebunden:

    Visual Basic-Quellcode

    1. Private Sub Suchen_Click()
    2. Zeile = 2
    3. Do Until IsEmpty(Cells(Zeile, 3))
    4. Datum = Cells(Zeile, 3)
    5. With Range(Cells(Zeile, 1), Cells(Zeile, 3))
    6. If CDate(Day(Datum) & "." & Month(Datum) & "." & Year(Date)) = Date Then
    7. .Interior.ColorIndex = xlNone
    8. Name = Cells(Zeile, 1) & " " & Cells(Zeile, 2) & " " & Cells(Zeile, 3) & " " & Cells(Zeile, 4) & vbLf
    9. If Name <> "" Then
    10. Liste.AddItem Name & " hat heute Geburtstag und wird " & CDec(Year(Date) - Year(Datum)) & "Jahre alt." & vbLf
    11. Else
    12. MsgBox "", vbExclamation, "Heute liegt kein Geburtstag an!"
    13. End If
    14. Else
    15. End If
    16. End With
    17. Zeile = Zeile + 1
    18. Loop
    19. End Sub
    Alles klar! Habs hinbekommen! Sobald ich die UserForm öffne, werden alle Übereinstimmungen als Variablen geschrieben und als ListBox ausgegeben.

    Mein nächstes Problem: Wie kann ich das ganze so einrichten, dass nicht nur das aktive Tabellenblatt, sondern die gesamte Mappe nach Übereinstimmungen im Datum abgesucht werden?

    LG Jana
    Alles klar, ich glaube ich habs hinbekommen *g*

    Danke an alle, die mir weitergeholfen haben. Ich glaube nicht, dass ich das ohne eure Hilfe hinbekommen hätte.

    Jetzt schau ich mal, ob ich nicht noch ein paar Detailverbesserungen vornehmen kann. Gibt es z.B. eiene Möglichkeit, die Listbox zu formatieren, sodass alle Einträge, egal wie lange, an der selben Stelle beginnen? Eine Tabelle sozusagen, die sich am längsten Eintrag orientiert?

    LG Jana