# Excel 2010 VBA Barcode Scan Problem Doppelte Einträge vermeiden



## Saibo (2. August 2012)

Hallo. Ich kenne mich leider nicht sonderlich gut mit VBA aus und hoffe auf eure Hilfe. 
Folgendes Problem:
Mir liegen mehrere Barcodes vor die als Wert eine Zahl ausgeben (1 bis 500). Diese werden beim Scan in Spalte A (A3:A500) eingetragen. Gleichzeitig wird jedem Wert bzw. jeder Zahl in Spalte B (B3:B500) die aktuelle Uhrzeit zugewiesen. Dies erreiche ich mit folgendem Code:


```
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A3:A500")) _
Is Nothing Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
End If

End Sub
```
ABER: Nun soll keine Zahl doppelt in Spalte A eingetragen werden. Wenn die Zahl bzw. der Wert bereits in Spalte A existiert, dann soll in dieser Zeile die Uhrzeit in Spalte C eingetragen werden. Und wenn in der Spalte C ebenfalls bereits ein Wert existiert, dann soll der Scan ignoriert werden.  
 Irgendwie sehe ich den Wald vor lauter Bäumen nicht. Kann man das lösen indem man den Code mit einigen if then Schleifen ergänzt?


----------



## HonniCilest (2. August 2012)

Versuchs mit der Find-Methode...


```
If Not Range("A3:A" & Target.Row - 1).Find(Target.Value) Is Nothing Then
'...
```


----------



## Saibo (3. August 2012)

Vielen Dank für den Tipp. KAnn man einem Barcode-Sanner, der per USB angeschlossen ist und Tastatureingaben simuliert dazu zwingen seine Werte nur in eine bestimmte Zelle zu schreiben und in eine bestimmte Spalte? Und das unabhängig davon welche Zelle in welcher Spalte gerade ausgewählt bzw. markiert sind?

Beispiel: In Spalte A werden im Bereich A3:A500 per Barcode-Scanner Werte eingetragen. Es stehen bereits im BEreich A3:A20 Werte in den Zellen. 
Nun wurde eine Zelle in einer anderen Spalte angeklickt und damit markiert. 

Beim erneuten Scannen sollte nun automatisch wieder in die Spalte A zurückgesprungen werden und der Werte in die erste gefundene leere Zelle eingetragen werden. Ist das Möglich?


----------



## HonniCilest (3. August 2012)

> Und das unabhängig davon welche Zelle in welcher Spalte gerade ausgewählt bzw. markiert sind?



Ist das erwünscht, dass andere Zellen markiert sind? Ansonsten würde mir spontan die Variante einfallen:

```
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim LastCell As Range
    
    Set LastCell = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Offset(1, 0)
    
    If LastCell.Address <> ActiveCell.Address Then
        'MsgBox "Ungültige Selektion!"
        LastCell.Activate
    End If
End Sub
```
Nachteil: Späteres "Aufräumen" könnte sich ohne Makro schwierig gestalten.

Edit:

Oder alternativ manuelle Vorbeugung:
- die erste Spalte markieren
- Rechtsklick > Zelle formatieren
- Reiter Schutz
- Zellschutz deaktivieren
- Fenster schließen
- Extras > Schutz > Tabellenschutz
- Deaktiverung von Selektion geschützer Zellen
- Tabellenschutz aktivieren

Nachteil: Zellen der gleichen Spalte werden hier nicht abgefangen.


----------

