Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Stempeluhr RFID Leser und VBA

Forumthread: Stempeluhr RFID Leser und VBA

Stempeluhr RFID Leser und VBA
15.10.2018 18:31:18
Phillieblunt
Schönen guten Abend,
würde mir gerne aus einem RFID Leser eine Stempeluhr bauen.
Hab auch immerhin schon geschafft, dass Datum und Zeit eingetragen wird.
Jetzt hätte ich gerne, dass das System unterscheidet ob ich ein- oder ausstempel und dann die Summe ausrechnet.
Beachten: ein- und ausstempeln muss nicht unbedingt am selben Tag sein.
https://www.herber.de/bbs/user/124636.xlsm
Vg Philipp
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Stempeluhr RFID Leser und VBA
15.10.2018 22:32:41
onur
Das ist nicht so einfach, wie du glaubst.
Wenn das Lesegerät Daten nicht speichert, müsste das Makro/die Datei permanent im Vordergrund laufen.
Dann brauchst du ein separates Blatt, wo die Stempelzeiten den Mitarbeitern zugeordnet und die Zeitpaare eingetragen werden müssten.
Ausserdem müssen die Zeitpaare auf Plausibilität geprüft werden (z.B. Diff. grösser als 10 Std?) für den Fall, dass Jemand vergessen hat, ein- oder auszustempeln.
Abgesehen davon muss dafür gesorgt werden, dass die Stempelzeiten der MA nicht verändert werden können, denn sie haben meines Wissens nach DOKUMENTENSTATUS.
Anzeige
AW: Stempeluhr RFID Leser und VBA
19.10.2018 07:03:54
Phillieblunt
Hallo Onur,
vielen Dank für Deine Nachricht. Ganz so streng, mit Dokumentenstatus, würde ich das in meinem Fall nicht betrachten, da Excel ein reines Hobby von mir ist und es in diesem Fall nicht darauf ankommt. Ich möchte lediglich meine Faulheit beim Schreiben meiner Stundenliste unterstützen :)
Lg Philipp
Anzeige
AW: Stempeluhr RFID Leser und VBA
16.10.2018 10:50:53
UweD
Hallo
wenn du doch sowieso VBA benutzt, dann kannst du auch alles damit berechnen und wegschreiben.
Wie du das Abfragen des Lesers realisierst, weiss ich nicht; aber die Änderungen in Spalte A kannst du so verarbeiten.
Microsoft Excel Objekt Tabelle1
Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim Chip As Variant, MA As String 
    Dim Datum As Date, Dauer As Date 
    Dim Z1 As Integer, TB, iZ As Double, WF 
    On Error GoTo Fehler 
     
     
    Z1 = 5 'Überschrift in Zeile 
         
    If Target.Column = 1 And Target.Row > Z1 And Target.Count = 1 Then 
        Set TB = Sheets("Stammdaten") 
        Set WF = WorksheetFunction 
         
        iZ = Target.Row 'aktuelle Zeile 
         
        Chip = Target.Value 
        Application.EnableEvents = False ' Eventschleife verhindern 
         
        'Chip in Stammdaten ? 
        If WF.CountIf(TB.Columns("A:A"), Chip) > 0 Then 
            'Mitarbeiter auslesen 
            MA = WF.VLookup(Chip, TB.Columns("A:B"), 2, 0) 
        Else 
            MsgBox "unbekannter Chip '" & Chip & "'" 
            Target.ClearContents 
            GoTo Fehler ' events auf jeden Fall wieder einschalten 
        End If 
         
        Datum = Now 
         
        Cells(iZ, 2) = Datum 
        Cells(iZ, 4) = Format(Datum, "hh:mm") 
        Cells(iZ, 5) = MA 
         
        'Gerade / ungerade Anzahl Mitarbeiter-Einträge bis zu dieser Zeile ermitteln 
        If WF.CountIf(Cells(Z1, 5).Resize(iZ - Z1 + 1, 1), MA) Mod 2 = 1 Then 'ungerade = Beginn 
             
            Cells(iZ, 6) = "Beginn" 
         
        Else ' es gibt bereits einen Beginn 
         
            Cells(iZ, 6) = "Ende" 
             
            'Zeitdifferenz berechnen (auch über Tage hinweg) 
            Dauer = Datum - _
                       WF.MaxIfs(Cells(Z1, 2).Resize(iZ - Z1, 1), Cells(Z1, 5).Resize(iZ - Z1), MA) 
            Cells(iZ, 7) = Dauer 
            Cells(iZ, 7).NumberFormat = "[hh]:mm" '[Klammern] für Anzeige mehr als 24 Std 
             
        End If 
     
    End If 
     
    '*** Fehlerbehandlung 
    Err.Clear 
Fehler: 
    Application.EnableEvents = True 
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear 
End Sub 
 
 

LG UweD
Anzeige
AW: Stempeluhr RFID Leser und VBA
19.10.2018 07:05:11
Phillieblunt
Hallo Uwe,
das sieht mega aus :) so kann ich mich doch noch ein wenig in VBA versuchen. Werde Dein zur Verfügung gestellten Code heute noch versuchen - melde mich dazu wieder - aber vorab schon mal vielen Dank!
Lg Philipp
AW: Stempeluhr RFID Leser und VBA
19.10.2018 08:50:11
Phillieblunt
Servus Uwe,
mag leider noch nicht so klappen, bei mir..
Magst mal drüber schauen?
https://www.herber.de/bbs/user/124752.xlsm
Danke und Lg Philipp
Anzeige
AW: Stempeluhr RFID Leser und VBA
19.10.2018 09:51:15
UweD
Hallo nochmal
1.
Das Makro MUSS in den Codebereich der Tabelle und NICHT in DieseArbeitsmappe
- Rechtsclick auf den Tabellenblattreiter von Zeiteneingabe
- Code anzeigen
- dort dann diesen Code reinkopieren
2.
- du hast eine Spalte gelöscht, das muss natürlich im Code ÜBERALL angepasst werden
- einige Schreibfehler sind entstanden
= dazu ein Tipp: schreib in die oberste Zeile immer "Option Explicit"
= dadurch werden Schreibfehler meist erkannt, da diese Worte dann als Variable interpretiert werden.
= Da diese Variablen nicht DIMensioniert sind, wird das angemeckert
Hier der angepasste Code
Microsoft Excel Objekt Tabelle1
Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim Chip As Variant, MA As String 
    Dim Datum As Date, Dauer As Date 
    Dim Z1 As Integer, TB, iZ As Double, WF 
    On Error GoTo Fehler 
     
     
     
    Z1 = 1 
     
    If Target.Column = 1 And Target.Row > Z1 And Target.Count = 1 And Target <> "" Then 
        Set TB = Sheets("Stammdaten") 
        Set WF = WorksheetFunction 
         
        iZ = Target.Row 
         
        Chip = Target.Value 
        Application.EnableEvents = False 
         
        If WF.CountIf(TB.Columns("A:A"), Chip) > 0 Then 
            MA = WF.VLookup(Chip, TB.Columns("A:B"), 2, 0) 
        Else 
            MsgBox "unbekannter Chip '" & Chip & "'" 
            Target.ClearContents 
            GoTo Fehler 
        End If 
         
        Datum = Now 
         
        Cells(iZ, 2) = Datum 
        Cells(iZ, 3) = Format(Datum, "hh:mm") 
        Cells(iZ, 4) = MA 
         
        If WF.CountIf(Cells(Z1, 4).Resize(iZ - Z1 + 1, 1), MA) Mod 2 = 1 Then 
         
            Cells(iZ, 5) = "Kommen" 
        Else 
            Cells(iZ, 5) = "Gehen" 
             
            Dauer = Datum - _
                WF.MaxIfs(Cells(Z1, 2).Resize(iZ - Z1, 1), Cells(Z1, 4).Resize(iZ - Z1), MA) 
            Cells(iZ, 6) = WF.Ceiling(Dauer, "00:01:00") 'aufrunden auch ganze Minuten 
            Cells(iZ, 6).NumberFormat = "[hh]:mm" 
        End If 
    End If 
     
    Err.Clear 
Fehler: 
    Application.EnableEvents = True 
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear 
 
End Sub 
 

LG UweD
Anzeige
AW: Stempeluhr RFID Leser und VBA
19.10.2018 10:14:58
UweD
Hier nochmal mit Vorbelegung der Spalten
Microsoft Excel Objekt Tabelle1
Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim Chip As Variant, MA As String 
    Dim Datum As Date, Dauer As Date 
    Dim Z1 As Integer, TB, iZ As Double, WF 
    Dim SpChip As Integer, SpDatum As Integer, SpZeit As Integer 
    Dim SpMA As Integer, SpArt As Integer, SpDauer As Integer 
    On Error GoTo Fehler 
     
     
     
    Z1 = 1 
     
    If Target.Column = 1 And Target.Row > Z1 And Target.Count = 1 And Target <> "" Then 
        Set TB = Sheets("Stammdaten") ' Daten liegen in A:B 
        Set WF = WorksheetFunction 
         
        'Spaltenfestlegung 
        SpChip = 1: SpDatum = 2: SpZeit = 3: SpMA = 4: SpArt = 5: SpDauer = 6 
         
        iZ = Target.Row 
         
        Chip = Target.Value 
        Application.EnableEvents = False 
         
        If WF.CountIf(TB.Columns("A:A"), Chip) > 0 Then 
            MA = WF.VLookup(Chip, TB.Columns("A:B"), 2, 0) 
        Else 
            MsgBox "unbekannter Chip '" & Chip & "'" 
            Target.ClearContents 
            GoTo Fehler 
        End If 
         
        Datum = Now 
         
        Cells(iZ, SpDatum) = Datum 
        Cells(iZ, SpZeit) = Format(Datum, "hh:mm") 
        Cells(iZ, SpMA) = MA 
         
        If WF.CountIf(Cells(Z1, SpMA).Resize(iZ - Z1 + 1, 1), MA) Mod 2 = 1 Then 
         
            Cells(iZ, SpArt) = "Kommen" 
        Else 
            Cells(iZ, SpArt) = "Gehen" 
             
            Dauer = Datum - _
                WF.MaxIfs(Cells(Z1, SpDatum).Resize(iZ - Z1, 1), Cells(Z1, SpMA).Resize(iZ - Z1), MA) 
            Cells(iZ, SpDauer) = WF.Ceiling(Dauer, "00:01:00") 'Aufrunden auch ganze Minuten 
            Cells(iZ, SpDauer).NumberFormat = "[hh]:mm" 
        End If 
    End If 
     
    Err.Clear 
Fehler: 
    Application.EnableEvents = True 
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear 
 
End Sub 
LG UweD
Anzeige
AW: Stempeluhr RFID Leser und VBA
19.10.2018 11:28:53
Phillieblunt
Super Uwe,
vielen Dank erst Mal für die wertvollen Tips. Wird doch noch n VBA Profi aus mir :)
Leider hab ich aber hier ein Problem.
If WF.CountIf(Cells(Z1, SpMA).Resize(iZ - Z1 + 1, 1), MA) Mod 2 = 1 Then
Cells(iZ, SpArt) = "Kommen"
Else
Cells(iZ, SpArt) = "Gehen"
Dauer = Datum - _
WF.MaxIfs(cells(z1, SpDatum).Resize(iZ-z1,1),cells(z1,SpMA).Resize(iz-z1),MA)
Cells(iZ, SpDauer) = WF.Ceiling(Dauer, "00:01:00")
Cells(iZ, SpDauer).NumberFormat = "[hh]:mm"
End If
In der Zeile Dauer = Datum - _
beim Abschließen dieser Zeile mit Enter, wir ein Fehler ausgegeben:
"Beim Ausführen dieses Befehles wird die Arbeitsmappe zurück gesetzt oder so ähnlich.."
und dann nur noch ein Fehler beim Kompilieren.
Und die Zeile danach, die mit WF.MaxIfs beginnt, meckert er auch an: "erwarte =" sagt er..
Anzeige
AW: Stempeluhr RFID Leser und VBA
19.10.2018 11:49:08
UweD
Hallo
die Zeilen sind als Eine anzusehen.
durch das _[und Leerzeichen davor und dahinter] wird gesagt, dass die Zeile weitergeht
bei dir hat sich eine komplette Leerzeile dazwischengemogelt

Dauer = Datum - _
WF.MaxIfs(Cells(Z1, SpDatum).Resize(iZ - Z1, 1), Cells(Z1, SpMA).Resize(iZ - Z1), MA)

LG UweD
Anzeige
;
Anzeige

Infobox / Tutorial

Stempeluhr mit RFID Leser und VBA in Excel


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Klicke mit der rechten Maustaste auf den Reiter des Arbeitsblattes, in dem du die Stempeluhr implementieren möchtest, und wähle "Code anzeigen".

  2. Code einfügen: Füge den folgenden VBA-Code in das Codefenster ein, um die Stempelzeiten zu verarbeiten:

    Option Explicit 
    Private Sub Worksheet_Change(ByVal Target As Range) 
       Dim Chip As Variant, MA As String 
       Dim Datum As Date, Dauer As Date 
       Dim Z1 As Integer, TB, iZ As Double, WF 
       On Error GoTo Fehler 
    
       Z1 = 1 
    
       If Target.Column = 1 And Target.Row > Z1 And Target.Count = 1 And Target <> "" Then 
           Set TB = Sheets("Stammdaten") 
           Set WF = WorksheetFunction 
    
           iZ = Target.Row 
           Chip = Target.Value 
           Application.EnableEvents = False 
    
           If WF.CountIf(TB.Columns("A:A"), Chip) > 0 Then 
               MA = WF.VLookup(Chip, TB.Columns("A:B"), 2, 0) 
           Else 
               MsgBox "unbekannter Chip '" & Chip & "'" 
               Target.ClearContents 
               GoTo Fehler 
           End If 
    
           Datum = Now 
           Cells(iZ, 2) = Datum 
           Cells(iZ, 3) = Format(Datum, "hh:mm") 
           Cells(iZ, 4) = MA 
    
           If WF.CountIf(Cells(Z1, 4).Resize(iZ - Z1 + 1, 1), MA) Mod 2 = 1 Then 
               Cells(iZ, 5) = "Kommen" 
           Else 
               Cells(iZ, 5) = "Gehen" 
               Dauer = Datum - WF.MaxIfs(Cells(Z1, 2).Resize(iZ - Z1, 1), Cells(Z1, 4).Resize(iZ - Z1), MA) 
               Cells(iZ, 6) = WF.Ceiling(Dauer, "00:01:00") 
               Cells(iZ, 6).NumberFormat = "[hh]:mm" 
           End If 
       End If 
    Fehler: 
       Application.EnableEvents = True 
       If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear 
    End Sub
  3. Spalten einrichten: Stelle sicher, dass die Spalten in deinem Arbeitsblatt entsprechend den Anforderungen des Codes eingerichtet sind (z.B. Mitarbeiter-ID in Spalte A, Datum in Spalte B).


Häufige Fehler und Lösungen

  • Makro nicht im richtigen Bereich: Stelle sicher, dass der Code im Codebereich des entsprechenden Arbeitsblattes eingefügt wurde und nicht in "Diese Arbeitsmappe".

  • Unbekannter Chip: Wenn du einen Fehler bezüglich eines unbekannten Chips erhältst, überprüfe, ob der Chip in der "Stammdaten"-Tabelle vorhanden ist.

  • Fehler beim Ausführen des VBA-Codes: Achte darauf, dass keine Leerzeilen im Code vorhanden sind, die den Syntaxfehler verursachen könnten.


Alternative Methoden

Falls du keine VBA-Programmierung verwenden möchtest, kannst du auch auf Add-Ins oder spezielle Software zurückgreifen, die RFID-Daten in Excel importieren kann. Alternativ kannst du die RFID-Daten in eine CSV-Datei exportieren und diese dann in Excel importieren.


Praktische Beispiele

Hier ein einfaches Beispiel, um die Funktionalität der RFID-Stempeluhr in Excel zu testen:

  1. Testchip: Verwende einen Testchip (z.B. RFID-Karte) und füge ihn in die erste Spalte ein.
  2. Daten eingeben: Füge manuell einige Mitarbeiterdaten in die "Stammdaten"-Tabelle ein.
  3. Einstempeln: Scanne den Chip, um die aktuelle Uhrzeit und das Datum in die entsprechenden Spalten einzutragen.

Tipps für Profis

  • Dokumentenstatus: Wenn du mit mehreren Benutzern arbeitest, solltest du den Dokumentenstatus in Excel aktivieren, um Änderungen besser nachvollziehen zu können.

  • Fehlerbehandlung verbessern: Verwende On Error Resume Next, um den Code robuster zu machen, falls unerwartete Eingaben auftreten.

  • Automatisierung: Überlege, ob du die RFID-Integration automatisieren kannst, um den Prozess der Zeiterfassung noch effizienter zu gestalten.


FAQ: Häufige Fragen

1. Wie kann ich die Stempeluhr für mehrere Mitarbeiter anpassen?
Du kannst die "Stammdaten"-Tabelle erweitern, um mehrere Mitarbeiter zu verwalten, und den Code entsprechend anpassen, damit er die Einträge für jeden Mitarbeiter korrekt verarbeitet.

2. Was mache ich, wenn der RFID Leser nicht erkannt wird?
Überprüfe die Verbindung des RFID Lesers mit deinem Computer. Stelle sicher, dass er als Eingabegerät erkannt wird und die entsprechenden Treiber installiert sind.

3. Kann ich die Stempeluhr auch ohne VBA verwenden?
Ja, du kannst die Daten auch manuell eingeben oder spezielle Softwarelösungen verwenden, die RFID-Daten direkt in Excel importieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige