Office: (Office 2013) Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen

Helfe beim Thema Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten tag, ich bin ein Anfänger mit VBA Programierung. Zu meinem Problem, ich habe eine Personalliste in Excel, welche dem Nutzer beim Start die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Interzeptor1986, 10. Juni 2018.

  1. Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen


    Guten tag, ich bin ein Anfänger mit VBA Programierung.
    Zu meinem Problem, ich habe eine Personalliste in Excel, welche dem Nutzer beim Start die Geburtstage der nächsten 7 Tage anzeigt.
    Das funktioniert auch, aber dauert recht lange 45-60 sec und manchmal schmiert Excel mir ab.
    Vielleicht helft ihr mir auf die Sprünge wie ich dieses Problem anders lösen kann.
    Da es solange dauert habe ich es derzeit über einen Command Button laufen, soll aber falls sich die abfrage beschleunigen lässt als Workbook_open laufen.

    Geburtstage der Mitarbeiter stehen im Bereich H3:H403 in dem Format "TT.MM.JJJ" bsp "12.06.1961"
    in Spalte J steht das Geburtstag in diesem Jahr bsp. "12.06.2018"
    Spalte E = Nachname
    Spalte F= Vorname
    Zeile 2 sind die Überschriften meiner Tabelle und Zeile 1 ist als Platzhalter für die Commandbuttons

    Am liebsten wäre es mir wenn er in Der MsgBox einzeln auflistet Tageweise wer da Geburtstag hat, dann brauche ich das nicht in der Ausgabezeile wie es bisher in meinem Code ist

    Hier der Code:



    Sub Birthday()
    Dim rng As Range
    Dim cel As Range
    Dim strMsg As String
    On Error Resume Next
    If MsgBox("Wollen Sie alle Geburtstage der nächsten 7 Tage angezeigt bekommen? (Dauer ca 45 Sekunden)", vbYesNo) = vbNo Then Exit Sub
    With Sheets("Speicherort")


    For Each rng In .Range("Speicherort!H3:H403" & Application.max(2, .Cells(.Rows.Count, 10).End(xlUp).Row))
    If DateSerial(Year(Date), Month(rng), Day(rng)) = Date Or _
    DateSerial(Year(Date), Month(rng), Day(DateAdd("d", -1, rng))) = Date Or _
    DateSerial(Year(Date), Month(rng), Day(DateAdd("d", -2, rng))) = Date Or _
    DateSerial(Year(Date), Month(rng), Day(DateAdd("d", -3, rng))) = Date Or _
    DateSerial(Year(Date), Month(rng), Day(DateAdd("d", -4, rng))) = Date Or _
    DateSerial(Year(Date), Month(rng), Day(DateAdd("d", -5, rng))) = Date Or _
    DateSerial(Year(Date), Month(rng), Day(DateAdd("d", -6, rng))) = Date Or _
    DateSerial(Year(Date), Month(rng), Day(DateAdd("d", -7, rng))) = Date Then
    strMsg = strMsg & Left(.Cells(rng.Row, 5).Text & " " & .Cells(rng.Row, 6).Text, 35) & " wird " & Year(Date) - Year(rng) & " Jahre alt am " & Left(.Cells(rng.Row, 10).Text, 35) & vbLf
    End If
    Next

    End With

    If Len(strMsg) Then
    strMsg = "Heute ist der " & Format(Date, "dddd, dd.MM.yyyy") & vbLf & vbLf & strMsg
    MsgBox strMsg
    End If

    On Error GoTo 0

    End Sub



    PS: Hoffe das ist nachvollziehbar *Smilie danke schonmal

    :)
     
    Interzeptor1986, 10. Juni 2018
    #1
  2. OfficeUser Neuer User
    Moin!
    Schaue Dir mal die Datei an.
    2.000 Namen, Geburtstage werden einerseits mittels Formeln angezeigt:
     LMN
    1Heute12. Juni 
    2GeburtsdatumNameVorname
    312.06.1964Name 1063Vorname 1063
    412.06.1996Name 0188Vorname 0188
    ZelleFormel
    M1=TEXT(HEUTE();"TT. MMMM")
    L3{=WENNFEHLER(INDEX($A:$A;KKLEINSTE(WENN($B:$B00=M;ZEILE(:00));ZEILE($A1)));"")}
    M3{=WENNFEHLER(INDEX($C:$C;KKLEINSTE(WENN($B:$B00=M;ZEILE(:00));ZEILE($A1)));"")}
    N3{=WENNFEHLER(INDEX($D:$D;KKLEINSTE(WENN($B:$B00=M;ZEILE(:00));ZEILE($A1)));"")}
    L4{=WENNFEHLER(INDEX($A:$A;KKLEINSTE(WENN($B:$B00=M;ZEILE(:00));ZEILE($A2)));"")}
    M4{=WENNFEHLER(INDEX($C:$C;KKLEINSTE(WENN($B:$B00=M;ZEILE(:00));ZEILE($A2)));"")}
    N4{=WENNFEHLER(INDEX($D:$D;KKLEINSTE(WENN($B:$B00=M;ZEILE(:00));ZEILE($A2)));"")}
    Achtung, Matrixformel enthalten!
    Die geschweiften Klammern{} werden nicht eingegeben.
    Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
    oder nach Start des Makros RPP mit Deiner gewünschten MsgBox:

    Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen Njwkbyr.png


    Das Ganze innerhalb eines Wimperschlags. *wink.gif*
    Wer die Datei wegen des Makros nicht herunterladen möchte:
    hier der Code:
    Modul Modul1
    Gruß Ralf
     
    OfficeUser, 12. Juni 2018
    #2
  3. Hi,

    die Abfrage lässt sich ganz einfach beschleunigen:

    1. den zu durchsuchenden Bereich korrekt einschränken und nicht eine knappe halbe Million Zeilen durchsuchen.

    2. die Zugriffe auf die einzelnen Zellen auf ein Minimum beschränken.

    Zu 1:
    Der blaue Teil sucht in Spalte 10 (=J) von unten nach dem letzten Eintrag. Laut deiner Beschreibung müsste das die Zeile 403 sein. Und dies wird nun durch das &-Zeichen an den roten Ausdruck angehängt. Damit durchsuchst du nun den Bereich "Speicherort!H3:H403403". Das solltest du als erstes korrigieren. Und schon läuft dein Programm um den Faktor 1000 schneller!

    Zu 2:
    Jeder Zugriff eine Zelle kostet Zeit. Bei der Zelle rng handelt es sich schon um ein Datum. Ein Datum ist im Grund nichts anderes eine Zahl. Wenn du wissen willst, welches Datum vor 2 Tagen wahr, dann reicht es von heute die Zahl 2 abzuziehen. Man braucht nicht über DateAdd zu gehen. Und das Ganze macht man dann auch nur ein Mal und nicht sieben mal:
    Code:
     
    HKindler, 12. Juni 2018
    #3
  4. Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen

    Wenn ich deinen Code eingebe kriege ich den Wert 00:00:00 als Datum ausgespuckt (Einzelschritt, da beim burchlaufen nichts kommt). der Schlickt das Dim anscheinend nicht richtig.

    Zu dem hier:

    For Each rng In .Range("Speicherort!H3:H403" & Application.max(2, .Cells(.Rows.Count, 10).End(xlUp).Row))

    habe es nun auf :
    For Each rng In .Range("Speicherort!H3:H403)

    abgeändert, Super danke 1million mal schneller
     
    Interzeptor1986, 12. Juni 2018
    #4
  5. Hi,

    es ist ziemlich genau der Faktor 1.000 und nicht 1.000.000. *Smilie

    Und mein "Code" ist kein kompletter Code, sondern nur Ersatz für deine IF-Zeile, die ich zitiert habe. Ersetze diese durch meine drei Zeilen.

    noch besser: benutze als Bereich anstatt H3:H403 den Bereich J3:J403 und folgende Zeile Code:
     
    HKindler, 12. Juni 2018
    #5
  6. Dank dir Hkindler,

    dein Code funktioniert nur wenn ich in den Spalten J suchen lasse.
    Wenn der Suchbereich bei Spalte H bleibt, kommt meine Msgbox.
    Negativ, dann zeigt er mir an wer innerhalb der nächsten 7 tage Geburtstag hat aber wird 0 Jahre alt.

    RPPP63 dank dir, ich werde heute deine Antwort auch mal testen und gucken was der Sekretärin besser gefällt.
     
    Interzeptor1986, 12. Juni 2018
    #6
  7. Wenn Du das Alter ebenfalls angezeigt haben willst, solltest Du dies mittels DateDiff() errechnen.
    Ändere die Sub wie folgt:
    Ergibt heute:


    Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen PYrTysM.png


    Gruß Ralf
     
    RPP63, 12. Juni 2018
    #7
  8. Beverly
    Beverly Erfahrener User

    Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen

    Hi,

    du musst nicht alle Zeilen durchlaufen - benutze den Autofilter und durchlaufe nur die sichtbaren Zellen:

    Code:
     
    Beverly, 12. Juni 2018
    #8
  9. Hallo,

    mal ein ganz anderes Thema dazu.

    Du musst dir geneugenommen von jedem, zu dessen Namen auch das Geburtsdatum, als auch andere persönliche Daten enthalten sind, bestätigen lassen, dass er damit einverstanden ist, dass jeder andere, der Zugriff auf dies Mappe hat, diese Daten sehen kann und somit alle diese Personen in der Lage sind, diese Infiormationen unkontrolliert weiterzugeben.

    Andernfalls ist dies ein Verstoß gegen den Datenschutz. Sofern es beu euch einen Datenschutzbeauftragten gibt, solltest du das mit diesem besprechen.
     
    WS-53, 12. Juni 2018
    #9
  10. Ich bleibe mal beim off topic, WS-53.
    Es dürfte hier doch wohl um ein Dokument der Personalabteilung gehen, um Gratifikationen oder zumindest den Glückwunsch nicht zu vergessen.
    Warum sollte dem AG das GebDat nicht bekannt sein?
    Nicht, dass der ansonsten vergisst, dass die Rente ansteht … *wink.gif*
    (vom altersabhängigem Urlaubsanspruch mal ganz abgesehen)
     
  11. Hallo Ralf,

    es ist aus der Beschreibung nicht erkrennbar, ob es eine Mappe ist, die in der Personalabteilung geführt wird und nur Mitarbeiter der PA darauf Zugriff haben, ober ob es sich um eine Mappe handelt, die in einer Abteilung geführt wird und in dieser jeder Mitarbeiter Zugriff auf diese Mappe hat. Es ist nun einmal so, dass auch das Geburtsdatum dem Datenschutz unterliegt.

    Mit meinem Beitrag wollte ich ja nur darauf hingewiesen haben!
     
  12. Also einen Datenschutzbeauftragten gibt es hier,
    da nur 2 Personen aus der Personalabteilung Sowie die Sekretärin und der Chef zugriff auf diesen im Netzlaufwerk befindlichen Ordner haben, sollte dies kein Problem darstellen.

    Die Sensiblen Daten sind in SAP hinterlegt.
    Dort ist es sowieso nur dem Personal der Personalabteilung / Gehaltsabteilung möglich auf die gespeicherten Daten zu zugreifen.

    Zudem ist in der Excel Datei die Spalte Geburtsdatum ausgeblendet und passwortgeschützt, ebenfalls die VBA Programmierung.

    Unser IT-Experte möchte sobald die Datei so angepasst ist wie sie hier Verwendung finden soll, den VBA Code in einer .DLL Datei schreiben.
    Laut seiner Aussage macht es das umgehen der Passwörter dann fast unmöglich.
    Ohne könnte jeder mit etwas Kenntnis die Passwörter umgehen.

    Zwecks Planung wird eine Excel Liste geführt, in welcher die Ausbildungsjahrgänge sowie Fortbildungslehrgänge geplant werden.
    Da wir hier einige "Müller, Meier, Schulze" mit gleichen Vornamen haben, wird die Personenkennziffer als Unterscheidungsmerkmal eingefügt.
    Aus dieser lässt sich das Geburtsdatum ermitteln.

    Bisher gab es keine Beanstandungen seitens Datenschutzbeauftragten.
     
    Interzeptor1986, 12. Juni 2018
    #12
Thema:

Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen

Die Seite wird geladen...
  1. Geburtstage der nächsten 7 Tage aus mitarbeiterliste per MsgBox anzeigen - Similar Threads - Geburtstage nächsten Tage

  2. Geburtstag Liste

    in Microsoft Excel Hilfe
    Geburtstag Liste: Ich habe eine Tabelle wo die Geburtstage drin stehen Dann möchte ich mir die top 5 der nächsten Geburtstage anzeigen lassen das klappt auch alles gut nur wenn 2 Leute am selben Tag Geburtstag...
  3. Nach Import von Kontakten keine Geburtstag

    in Microsoft Outlook Hilfe
    Nach Import von Kontakten keine Geburtstag: Hallo, ich habe meine Kontakte in Outlook über eine csv Datei hinzugefügt. Sie sind auch alle vorhanden auch mit Geburtstagen. Mir werden die Geburtstage aber nicht in meinem Kalender angezeigt....
  4. Nahe Geburtstage anzeigen

    in Microsoft Excel Tutorials
    Nahe Geburtstage anzeigen: In A:A die Namen, in B:B Geburtsdatümer. Dann =LET(c;A1:B999;d;365,2425;b;INDEX(c;;2)-HEUTE(); FILTER(HSTAPELN(c;RUNDEN(ABS(b/d);0)); NACHZEILE(REST({1.-1}*b;d);LAMBDA(a;MIN(a)<8)))) gibt als...
  5. Geburtstag und Jubiläumstag -> Datum kombinieren

    in Microsoft Access Hilfe
    Geburtstag und Jubiläumstag -> Datum kombinieren: Hallo, Ich habe eine Mitgliederdatenbank für einen Verein. Darin sind die Mitglieder mit Geburtsdatum erfasst. Ich habe eine Auswertung erstellt, die mir alle Mitglieder mit "runden" Geburtstagen...
  6. Geburtstage der nächsten/letzten 10 Tage anzeigen

    in Microsoft Access Hilfe
    Geburtstage der nächsten/letzten 10 Tage anzeigen: Mahlzeit, in meiner Adressdatenbank soll jetzt unten ein kleines Listenfeld angezeigt werden, wo die Geburtstagstage der Leute angezeigt werden, die in den nächsten 10 Tagen geburtstag haben...
  7. Datum vor 1900-nächster Geburtstag

    in Microsoft Excel Hilfe
    Datum vor 1900-nächster Geburtstag: Hallo Excel-Gemeinde, die Altersberechnung, wenn das Geburtsdatum vor 1900 liegt, habe ich hinbekommen. An der Berechnung des nächsten Geburtstags und des Altes dann, scheitere ich leider...
  8. Geburtstage der nächsten 30 Tage ausgeben

    in Microsoft Excel Hilfe
    Geburtstage der nächsten 30 Tage ausgeben: Hallo - Ich versuche eine Tabelle zu erstellen, die mir die Geburtstage von Verwandten und Bekannten in den nächsten 30 Tagen ab "heute" auflistet, und zwar in aufsteigender Reihenfolge....
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden