Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Excel 2010 Barcode Scan Problem Doppelte Einträge vermeidenn

144 views
Skip to first unread message

Tobias

unread,
Aug 2, 2012, 4:18:54 AM8/2/12
to
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 C (C3:C500) 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?
--
Ansicht auf Narkive:
http://narkive.com/YkxvrtYm

Tobias

unread,
Aug 2, 2012, 5:08:29 AM8/2/12
to
Im ersten Textabschnitt meine ich bezüglich Eintragung der Uhrzeit natürlich Spalte B und nicht Spalte C. Sorry für diesen Tippfehler. Ich hoffe jemand kann mir weiterhelfen.

Claus Busch

unread,
Aug 2, 2012, 5:43:43 AM8/2/12
to
Hallo Tobias,

Am Thu, 02 Aug 2012 08:18:54 +0000 schrieb Tobias:


> 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?

wenn ich dich richtig verstanden habe, sollte es so funktionieren:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A3:A500")) Is _
Nothing Or Target.Count > 1 Then Exit Sub

If WorksheetFunction.CountIf(Range("A3:A500"), Target) = 1 Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
ElseIf WorksheetFunction.CountIf(Range("A3:A500"), _
Target) = 2 Then
If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Target.ClearContents
MsgBox "Scan schon vorhanden"
Else
Cells(WorksheetFunction.Match(Target, _
Range("A1:A500"), 0), 3) = Format(Time, "hh:mm:ss")
Target.ClearContents
End If
End If
End Sub


Mit freundlichen Gr��en
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3

Tobias

unread,
Aug 2, 2012, 7:43:14 AM8/2/12
to
Super vielen Dank. Funktioniert soweit richtig gut. Aber ich habe jetzt nur das Problem, dass bei bereits bestehenden Einträgen in Spalte A nicht in die nächste sondern in die übernächste Zelle gesprungen wird. Dadurch entstehen zwischen den einzelnen Einträgen in Spalte A leere Zellen. Eigentlich müsste man in der bereits ausgewählten Zelle bleiben.Ebenso wenn in Spalte C etwas eingetragen wird. Wie kann ich verhindern, dass bei Einträgen in Spalte C und bei bestehenden Einträgen in die übernächste Zelle in der Spalte A gesprungen wird?

Claus Busch

unread,
Aug 2, 2012, 7:51:14 AM8/2/12
to
Hallo Tobias,

Am Thu, 02 Aug 2012 11:43:14 +0000 schrieb Tobias:

> Super vielen Dank. Funktioniert soweit richtig gut. Aber ich habe jetzt nur das Problem, dass bei bereits bestehenden Eintr锟絞en in Spalte A nicht in die n锟絚hste sondern in die 锟絙ern锟絚hste Zelle gesprungen wird. Dadurch entstehen zwischen den einzelnen Eintr锟絞en in Spalte A leere Zellen. Eigentlich m锟絪ste man in der bereits ausgew锟絟lten Zelle bleiben.Ebenso wenn in Spalte C etwas eingetragen wird. Wie kann ich verhindern, dass bei Eintr锟絞en in Spalte C und bei bestehenden Eintr锟絞en in die 锟絙ern锟絚hste Zelle in der Spalte A gesprungen wird?

dann 锟絥dere den IF-Block so ab:

If WorksheetFunction.CountIf(Range("A3:A500"), Target) = 1 Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
ElseIf WorksheetFunction.CountIf(Range("A3:A500"), _
Target) = 2 Then
If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Target.ClearContents
MsgBox "Scan schon vorhanden"
Target.Select
Else
Cells(WorksheetFunction.Match(Target, _
Range("A1:A500"), 0), 3) = Format(Time, "hh:mm:ss")
Target.ClearContents
Target.Select
End If
End If


Mit freundlichen Gr锟斤拷en

Tobias

unread,
Aug 3, 2012, 3:47:43 AM8/3/12
to
Vielen Dank nochmals für ihre Hilfe. Das Problem der leeren Zellen wurde mit folgendem Funktionsaufruf gelöst:

Cells(Selection.Row - 1, Selection.Column).Select

Man springt dann einfach wieder eine Zeile nach oben.

Ich überlege gerade, inwiefern man ihren Code abändern muss, dass beim Einscannen eines bereits vorhandenen Wertes in Spalte A, die Zeile, in der dieser Wert steht, farblich markiert wird. Und beim Einscannen des nächsten Barcodes soll diese Markierung wieder gelöscht werden.
Können sie mir da vielleicht nochmal helfen oder zu mindest einen Tipp geben? Ich kenne mich leider zu wenig mit VBA aus.

Tobias

unread,
Aug 3, 2012, 3:54:39 AM8/3/12
to
Oh vielen Dank. Ihre Lösung ist deutlich eleganter bzw. besser. Werde das gleich abändern Danke nochmals.

Claus Busch

unread,
Aug 3, 2012, 3:53:40 AM8/3/12
to
Hallo Tobias,

Am Fri, 03 Aug 2012 07:54:39 +0000 schrieb Tobias:

> Oh vielen Dank. Ihre Lösung ist deutlich eleganter bzw. besser. Werde das gleich abändern Danke nochmals.

wollte schon nachfragen, ob die diese Antwort nicht bekommen hast, denn
Target.Select reicht aus. Wegen der Farbe teste mal folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A3:A500")) Is _
Nothing Or Target.Count > 1 Then Exit Sub

If WorksheetFunction.CountIf(Range("A3:A500"), Target) = 1 Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
Target.Interior.ColorIndex = xlNone
ElseIf WorksheetFunction.CountIf(Range("A3:A500"), _
Target) = 2 Then
Target.Interior.ColorIndex = 3
If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Target.ClearContents
MsgBox "Scan schon vorhanden"
Target.Select
Else
Cells(WorksheetFunction.Match(Target, _
Range("A1:A500"), 0), 3) = Format(Time, "hh:mm:ss")
Target.ClearContents
Target.Select
End If
End If
End Sub


Mit freundlichen Grüßen

Claus Busch

unread,
Aug 3, 2012, 3:58:42 AM8/3/12
to
Hallo Tobias,

dann kannst du auch die Zeile mit MsgBox rauswerfen, denn du siehst ja
Duplikate nun an der Farbe.

Tobias

unread,
Aug 3, 2012, 4:06:06 AM8/3/12
to

Tobias

unread,
Aug 3, 2012, 4:07:36 AM8/3/12
to
Sorry, habe das gerade doppelt gepostet

Tobias

unread,
Aug 3, 2012, 4:11:03 AM8/3/12
to
Habe ihren Code gerade getestet. Vielen Dank schon. Es wird aber nicht die Zelle mit dem bereits vorhandenen Code rot markiert sondern die ausgewählte leere Zelle, die eigentlich mit dem Wert des nächsten Scans gefüllt werden soll.

Tobias

unread,
Aug 3, 2012, 4:14:17 AM8/3/12
to
Und beim einscannen des nächsten neuen Wertes in der nächsten Zeile, wird die rote Markierung nicht gelöscht.

Claus Busch

unread,
Aug 3, 2012, 4:20:04 AM8/3/12
to
Hallo Tobias,

Am Fri, 03 Aug 2012 08:14:17 +0000 schrieb Tobias:

> Und beim einscannen des nächsten neuen Wertes in der nächsten Zeile, wird die rote Markierung nicht gelöscht.

sorry, habe die Frage nach der Farbe falsch verstanden. Aber gelöscht
wird sie schon, wenn am Code nichts verändert wurde. Ich teste alles
bevor ich es poste.
Probiere es mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A3:A500")) Is _
Nothing Or Target.Count > 1 Then Exit Sub

If WorksheetFunction.CountIf(Range("A3:A500"), Target) = 1 Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
Range(Cells(3, 1), Cells(Target.Row - 1, 1)) _
.Interior.ColorIndex = xlNone
ElseIf WorksheetFunction.CountIf(Range("A3:A500"), _
Target) = 2 Then
Cells(WorksheetFunction.Match(Target, _
Range("A1:A500"), 0), 1).Interior.ColorIndex = 3
If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Target.ClearContents
Target.Select
Else
Cells(WorksheetFunction.Match(Target, _
Range("A1:A500"), 0), 3) = Format(Time, "hh:mm:ss")
Target.ClearContents
Target.Select
End If
End If
End Sub


Tobias

unread,
Aug 3, 2012, 4:49:10 AM8/3/12
to
Ich habe ihren neuen Code nochmal ausführlich getestet. Es wird immer nur in Spalte A die nächste leere Zelle markiert. Und das auch beim Eintragen eines Wertes in Spalte C.

Es sollte aber der bereits vorhandene Wert markiert werden und nicht wenn etwas in Spalte C eingetragen wird. ICh gehe mal davon aus, dass der Aufruf:

Target.Interior.ColorIndex = 3

Ich tippe mal der Aufruf gehört in die dritte Schleife in der der doppelte Eintrag abgefragt wird:

If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Target.ClearContents
Target.Interior.ColorIndex = 3
MsgBox "Scan schon vorhanden"
Target.Select
Else

Richtig? Aber dann bleibt nach wievor das Problem bestehen, dass die nächste Zelle markiert wird und nicht die Zelle mit dem doppelten Wert. Und die MArkierung wird nicht gelöscht bei einem neuen Scan.

Tobias

unread,
Aug 3, 2012, 4:55:10 AM8/3/12
to
Danke für ihre schnelle Antwort. Habe den Code, den sie vor ein paar Sekunden getestet haben bereits getestet. Jetzt wird die richtige Zelle markiert aber bereits beim Eintrag eines Wertes in Spalte C. Es soll aber nur markiert werden, wenn in Spalte B und in Spalte C bereits werte stehen.

Und bei einem neuen Scan wird die Markierung nicht gelöscht. hmmmm... was mache ich falsch. Habe ihren Code nicht verändert.

Tobias

unread,
Aug 3, 2012, 5:00:45 AM8/3/12
to
Ahhhh...sorry, war zu voreilig. Die MArkierung wird bei einem neuen Scan doch gelöscht.

Claus Busch

unread,
Aug 3, 2012, 4:59:35 AM8/3/12
to
Hallo Tobias,

Am Fri, 03 Aug 2012 08:55:10 +0000 schrieb Tobias:

> Habe den Code, den sie vor ein paar Sekunden getestet haben bereits getestet. Jetzt wird die richtige Zelle markiert aber bereits beim Eintrag eines Wertes in Spalte C. Es soll aber nur markiert werden, wenn in Spalte B und in Spalte C bereits werte stehen.
>
> Und bei einem neuen Scan wird die Markierung nicht gelöscht. hmmmm... was mache ich falsch. Habe ihren Code nicht verändert.

jetzt habe ich den IF-Block angepasst, dass nur noch farblich markiert
wird, wenn in C schon ein Wert steht.

If WorksheetFunction.CountIf(Range("A3:A500"), Target) = 1 Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
Range(Cells(3, 1), Cells(Target.Row - 1, 1)) _
.Interior.ColorIndex = xlNone
ElseIf WorksheetFunction.CountIf(Range("A3:A500"), _
Target) = 2 Then
If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Cells(WorksheetFunction.Match(Target, Range("A1:A500"), _
0), 1).Interior.ColorIndex = 3
Target.ClearContents
Target.Select
Else
Cells(WorksheetFunction.Match(Target, _
Range("A1:A500"), 0), 3) = Format(Time, "hh:mm:ss")
Range(Cells(3, 1), Cells(Target.Row - 1, 1)) _
.Interior.ColorIndex = xlNone
Target.ClearContents
Target.Select
End If
End If


Tobias

unread,
Aug 3, 2012, 5:03:47 AM8/3/12
to
Läuft alles wunderbar. Nur er markiert wenn in Spalte C etwas eingetragen wird und nciht wenn man versucht einen bereits vorhandenen Wert einzuscannen.

Claus Busch

unread,
Aug 3, 2012, 5:03:56 AM8/3/12
to
Hallo Tobias,

Am Fri, 03 Aug 2012 09:03:47 +0000 schrieb Tobias:

> Läuft alles wunderbar. Nur er markiert wenn in Spalte C etwas eingetragen wird und nciht wenn man versucht einen bereits vorhandenen Wert einzuscannen.

ändere den IF-Block laut meiner letzten Antwort.

Tobias

unread,
Aug 3, 2012, 6:02:59 AM8/3/12
to
Jetzt läuft alles perfekt. Super. Danke.

Ich habe gerade festgestellt, dass es absolut sinnvoll wäre, wenn die Markierung nicht nur gelöscht wird, beim Scan des nächsten Barcodes, sondern auch beim Entfernen des Wertes in Spalte A, B oder C. Gibt es da so ne Funktion clear interior.colorindex? Es wäre auch notwendig, dass die Werte in Spalte B und C gelöscht werden, wenn man den Wert in Spalte A löscht.

Und außerdem muss man immer vor dem ersten Scan eine Zelle in Spalte A markieren, sonst wird der Wert in irgendeine leere Zelle gepackt, die gerade zufällig markiert ist. Könnte man per VBA den Scanner dazu zwingen immer nur die Werte in Spalte A zu packen auch wenn gerade zufällig eine Zelle in einer anderen Spalte markiert wurde? Das wäre genial. ICh habe leider nur absolut keinen Plan wie das gehen könnte. Hast du da vielleicht einen Tipp für mich?

Tobias

unread,
Aug 3, 2012, 6:20:01 AM8/3/12
to
Ich war mal wieder zu voreilig. Stelle doch gerade fest, dass es ganz sinnig ist, wenn die Zelle in Spalte A rot markiert bleibt auch wenn man den Wert in B oder C löscht.

Aber auf jeden Fall sollten die Werte in Spalte B und C gelöscht werden, wenn man den Wert in A löscht.

Viel wichtiger wäre es, dass man den Scanner dazu zwingt seine Werte immer nur in Zellen von Spalte A zu packen.

Claus Busch

unread,
Aug 3, 2012, 7:11:29 AM8/3/12
to
Hallo Tobias,

Am Fri, 03 Aug 2012 10:20:01 +0000 schrieb Tobias:

> Aber auf jeden Fall sollten die Werte in Spalte B und C gelöscht werden, wenn man den Wert in A löscht.

ändere den IF-Block:
If WorksheetFunction.CountIf(Range("A3:A500"), Target) = 1 Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
Range(Cells(3, 1), Cells(Target.Row - 1, 1)) _
.Interior.ColorIndex = xlNone
ElseIf WorksheetFunction.CountIf(Range("A3:A500"), _
Target) = 2 Then
If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Cells(WorksheetFunction.Match(Target, Range("A1:A500"),
_
0), 1).Interior.ColorIndex = 3
Target.ClearContents
Target.Select
Else
Cells(WorksheetFunction.Match(Target, _
Range("A1:A500"), 0), 3) = Format(Time, "hh:mm:ss")
Range(Cells(3, 1), Cells(Target.Row - 1, 1)) _
.Interior.ColorIndex = xlNone
Target.ClearContents
Target.Select
End If
ElseIf Len(Target) = 0 Then
Target.Offset(0, 1).Resize(1, 2).ClearContents
End If

das funktioniert aber nur, wenn du einzelne Einträge in A löschst, aber
ich denke, dass das dein Anliegen war.

> Viel wichtiger wäre es, dass man den Scanner dazu zwingt seine Werte immer nur in Zellen von Spalte A zu packen.

Wie machst du das denn jetzt? Wo schreibt denn der Scanner im Moment
hin?

Tobias

unread,
Aug 3, 2012, 8:07:48 AM8/3/12
to
Wenn Zelle in Spalte A =0 dann lösche Inhalt Zelle B und C.

Und Wenn Zelle in Spalte A =0 dann lösche rote Markierung.

Damit keine Leerzeilen entstehen wäre es vielleicht besser, wenn die gesamte Zeile gelöscht wird beim löschen von Wert in Spalte A.
Also:

Wenn Zelle in Spalte A=0 dann lösche Zeile

Könnte das so gehen?

Tobias

unread,
Aug 4, 2012, 4:00:49 AM8/4/12
to
Entschuldigen sie bitte, dass ich mich erst jetzt wieder melde. Aber seltsamerweise sehe ich Ihre Einträge manchmal erst deutlich später.

Vielen Dank für ihre erneute Hilfe. Werde ihren neuen Code umgehend testen.

Um auf Ihre Frage zurückzukommen.

Im Moment klicke ich die erste leere Zelle in Spalte A an (wenn die Spalte leer ist, dann wäre die erste Zelle A3, denn A1 und A2 dienen zur Beschriftung) Und dann trägt der Scanner die Werte untereinander in die Spalte ein, da der Scanner so konfiguriert ist, dass am Ende jedes Scans die Enter-Taste betätigt wird ( der Scanner emuliert Tastatureingaben).

Problem:
Wenn man nun eine andere Zelle in einer anderen Spalte anklickt bzw. aktiviert, dann trägt der Scanner dort den Wert ein. Er soll die Werte aber nur in Spalte A eintragen. Und dort auch nicht wahllos, sondern immer die nächst leere Zelle verwenden.

Beispiel:
In den Zellen A3 bis A25 sind bereits Werte eingetragen, dann soll der Scanner bei einem neuen Scan den Wert in A26 eintragen. Es ist aber gerade die Zelle F17 aktiviert (wurde zum Beispiel versehentlich angeklickt)


Man müsste quasi vor einem Scan abfragen welche Zelle gerade aktiviert ist und falls eine andere Zelle als die nächste leere Zelle in Spalte A aktiviert ist, dann müsste das korrigiert werden, indem die aktuelle Zelle deaktiviert wird und dann automatisch die nächste leere Zelle von Spalte A aktiviert wird. Die nächste leere Zelle könnte man vielleicht ermitteln, indem man den Range (A3:A500) durchläuft und abfragt ob die Zelle leer ist und wenn leer dann aktiviert man sie.
hmmm.... ich kenn mich leider mit VBA nicht aus. Könnte man das so umsetzen? Ich denke mal ihnen fällt bestimmt noch was besseres ein.

Tobias

unread,
Aug 4, 2012, 4:01:25 AM8/4/12
to

Tobias

unread,
Aug 4, 2012, 4:01:54 AM8/4/12
to

Claus Busch

unread,
Aug 4, 2012, 4:21:12 AM8/4/12
to
Hallo Tobias,

Am Sat, 04 Aug 2012 08:01:54 +0000 schrieb Tobias:

> Man müsste quasi vor einem Scan abfragen welche Zelle gerade aktiviert ist und falls eine andere Zelle als die nächste leere Zelle in Spalte A aktiviert ist, dann müsste das korrigiert werden, indem die aktuelle Zelle deaktiviert wird und dann automatisch die nächste leere Zelle von Spalte A aktiviert wird. Die nächste leere Zelle könnte man vielleicht ermitteln, indem man den Range (A3:A500) durchläuft und abfragt ob die Zelle leer ist und wenn leer dann aktiviert man sie.
> hmmm.... ich kenn mich leider mit VBA nicht aus. Könnte man das so umsetzen? Ich denke mal ihnen fällt bestimmt noch was besseres ein.

öffne deine Mappe, drücke Alt+F11. Im VBA-Editor klicke rechts auf dein
Projekt und wähle Einfügen => Modul. Kopiere folgenden Code in das
Codefenster des Moduls. Kehre zurück zu Excel, gehe auf Makros =>
Scannen => Optionen und wiese diesem Makro eine Tastenkombination zu.
Vor dem ersten Scan drückst du dann diese Tastenkombi. Danach geht es ja
durch Makro entweder automatisch oder durch Drücken von Enter in die
nächste Zelle:

Sub Scannen()
Dim FERow As Long
If Not Intersect(Range("A3:A500"), Cells(Rows.Count, _
1).End(xlUp).Offset(1, 0)) Is Nothing Then _
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
End Sub

Tobias

unread,
Aug 4, 2012, 5:30:37 AM8/4/12
to
Ich habe ihren neuen Code gerade getestet. Funktioniert wunderbar. Die Einträge in Spalte C und D werden gelöscht, wenn man den Wert in A löscht. Super. Vielen Danke.

Ich habe leider gerade festgestellt, dass ich in diesem Fall unter Umständen leere Zeilen in der Liste produzieren würde. Um das zu verhindern, müsste es zusätzlich die Option gäben, die gesamte Zeile vollständig zu löschen, denn dann würde die darunterliegende Zeile nach oben springen und es gäbe beim Löschen keine leeren Zeilen in der Liste.
Dies müsste vor dem Löschen des Wertes per MSGBox abgefragt werden. Klickt man auf NEIN bleibt die Zeile erhalten und man kann einen neuen Wert einscannen und klickt man auf JA wird die gesamte Zeile vollständig gelöscht und es müsste die nächste leere Zelle von Spalte A aktiviert werden, um dort einen neuen Scan durchführen zu können.

Problem:
Der Scanner springt aber immer automatisch nach dem Scan in die nächste Zeile, aber unter Umständen steht da schon bereits ein Wert drin, der dann überschrieben wird. Da fehlt eine Abfrage ob die Zelle leer ist und wenn nicht dann muss in die nächste Zeile gesprungen werden solange bis eine leere Zelle gefunden wurde. Aber wie implementiert man das????

Und da wären wir wieder bei dem von mir im vorherigen Beitrag beschriebenen Problem:
Anscheinend kommt man wirklich nicht drum herum dem Scanner beizubringen immer nur in leeren Zellen der Spalte A Werte einzutragen.

Tobias

unread,
Aug 4, 2012, 6:06:57 AM8/4/12
to
Anscheinend kommt man wirklich nicht drum herum dem Scanner generell bzw. global beizubringen immer nur in leeren Zellen der Spalte A Werte einzutragen.

Ich habe gerade auch ihr Makro getestet. Vielen Dank dafür. Leider springt er nur wieder in die Spalte A, wenn ich die festgelegte Tastenkombination drücke und nicht automatisch.

Ich habe zum Test mal Zelle F17 in Spalte F aktiviert. Wenn ich nun scanne wird dort der Wert eingetragen. Es müsste aber erst wieder automatisch in die Spalte A gesprungen werden, bevor der Scanner den Wert einträgt.

Aber dies geht nur wenn man vorab manuel das Makro aktiviert und dann scannt.

Kann man es nicht direkt im Worksheet implementieren?

Noch ein Problem:
Wenn ich nun einen Wert in Spalte A lösche, dann läßt sich in die selbe Zelle kein neuer Wert mehr einscannen.

Tobias

unread,
Aug 4, 2012, 6:09:54 AM8/4/12
to

Claus Busch

unread,
Aug 4, 2012, 6:56:40 AM8/4/12
to
Hallo Tobias,

Am Sat, 04 Aug 2012 10:09:54 +0000 schrieb Tobias:

> Ich habe gerade auch ihr Makro getestet. Vielen Dank dafür. Leider springt er nur wieder in die Spalte A, wenn ich die festgelegte Tastenkombination drücke und nicht automatisch.

ist halt mal nicht zu ändern

> Ich habe zum Test mal Zelle F17 in Spalte F aktiviert. Wenn ich nun scanne wird dort der Wert eingetragen. Es müsste aber erst wieder automatisch in die Spalte A gesprungen werden, bevor der Scanner den Wert einträgt.

wie beschrieben, muss man vorher die Tastenkombination drücken.

> Aber dies geht nur wenn man vorab manuel das Makro aktiviert und dann scannt.

wo ist das Problem beim Start des Scannens einmal diese
Tastenkombination zu drücken. Wenn in den Eigenschaften festgelegt ist,
dass bei Drücken der Eingabetaste nach unten gesprungen wird, geht doch
dann alles automatisch.

> Kann man es nicht direkt im Worksheet implementieren?

nein

> Noch ein Problem:
> Wenn ich nun einen Wert in Spalte A lösche, dann läßt sich in die selbe Zelle kein neuer Wert mehr einscannen.

Stimmt definitiv nicht, es sei denn es wurde etwas am Code verändert.

Tobias

unread,
Aug 4, 2012, 11:33:40 AM8/4/12
to
Ich entschuldige mich für die doppelten Einträge. Ist das von mir erwünschte nicht umsetztbar? Wenn ja haben sie vielleicht einen Tipp für mich?

fabr...@gmx.de

unread,
Aug 4, 2012, 1:08:27 PM8/4/12
to
Am Samstag, 4. August 2012 12:56:40 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> Am Sat, 04 Aug 2012 10:09:54 +0000 schrieb Tobias:
>
>
>
> > Ich habe gerade auch ihr Makro getestet. Vielen Dank daf�r. Leider springt er nur wieder in die Spalte A, wenn ich die festgelegte Tastenkombination dr�cke und nicht automatisch.
>
>
>
> ist halt mal nicht zu �ndern
>
>
>
> > Ich habe zum Test mal Zelle F17 in Spalte F aktiviert. Wenn ich nun scanne wird dort der Wert eingetragen. Es m�sste aber erst wieder automatisch in die Spalte A gesprungen werden, bevor der Scanner den Wert eintr�gt.
>
>
>
> wie beschrieben, muss man vorher die Tastenkombination dr�cken.
>
>
>
> > Aber dies geht nur wenn man vorab manuel das Makro aktiviert und dann scannt.
>
>
>
> wo ist das Problem beim Start des Scannens einmal diese
>
> Tastenkombination zu dr�cken. Wenn in den Eigenschaften festgelegt ist,
>
> dass bei Dr�cken der Eingabetaste nach unten gesprungen wird, geht doch
>
> dann alles automatisch.
>
>
>
> > Kann man es nicht direkt im Worksheet implementieren?
>
>
>
> nein
>
>
>
> > Noch ein Problem:
>
> > Wenn ich nun einen Wert in Spalte A l�sche, dann l��t sich in die selbe Zelle kein neuer Wert mehr einscannen.
>
>
>
> Stimmt definitiv nicht, es sei denn es wurde etwas am Code ver�ndert.
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3

Ich habe mich jetzt mal bei google angemeldet.
Hoffentlich funktioniert das Posten hier besser.

Vielen Dank für ihr Makro es erfüllt ihren Zweck.

Ich stehe jetzt nur noch vor einen Problem. Ich brauche die Funktion, dass man eine ganze Zeile löschen kann. Das heißt beim Löschen eines Wertes in Spalte A müsste eine Abfrage kommen, ob die ganze Zeile gelöscht werden soll oder nicht. Wenn man die Abfrage verneint, dann bleibt die Zeile bestehen und man kann dort einen neuen Wert einscannen. Wenn man die Abfrage bejaht, dann wird die gesamte Zeile gelöscht.

Ist sowas per VBA möglich? Und vielleicht sogar per Code im Worksheet?

Claus Busch

unread,
Aug 4, 2012, 1:21:10 PM8/4/12
to
Hallo Tobias,

Am Sat, 4 Aug 2012 10:08:27 -0700 (PDT) schrieb fabr...@gmx.de:

> Ich stehe jetzt nur noch vor einen Problem. Ich brauche die Funktion, dass man eine ganze Zeile löschen kann. Das heißt beim Löschen eines Wertes in Spalte A müsste eine Abfrage kommen, ob die ganze Zeile gelöscht werden soll oder nicht. Wenn man die Abfrage verneint, dann bleibt die Zeile bestehen und man kann dort einen neuen Wert einscannen. Wenn man die Abfrage bejaht, dann wird die gesamte Zeile gelöscht.
>
> Ist sowas per VBA möglich? Und vielleicht sogar per Code im Worksheet?

warum willst du eine ganze Zeile löschen? Wenn A gelöscht wird, wird
doch B und C auch gelöscht. Oder sind noch mehr Spalten befüllt? Das
bläht doch alles nur auf und du musst eine MsgBox bestätigen oder
ablehnen was den Ablauf stört. Und Einträge löschen oder ganze Zelle
löschen ist doch eigentlich das Gleiche.


Mit freundlichen Grüßen

fabr...@gmx.de

unread,
Aug 4, 2012, 2:01:37 PM8/4/12
to
Am Samstag, 4. August 2012 19:21:10 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> Am Sat, 4 Aug 2012 10:08:27 -0700 (PDT) schrieb fabr...@gmx.de:
>
>
>
> > Ich stehe jetzt nur noch vor einen Problem. Ich brauche die Funktion, dass man eine ganze Zeile l�schen kann. Das hei�t beim L�schen eines Wertes in Spalte A m�sste eine Abfrage kommen, ob die ganze Zeile gel�scht werden soll oder nicht. Wenn man die Abfrage verneint, dann bleibt die Zeile bestehen und man kann dort einen neuen Wert einscannen. Wenn man die Abfrage bejaht, dann wird die gesamte Zeile gel�scht.
>
> >
>
> > Ist sowas per VBA m�glich? Und vielleicht sogar per Code im Worksheet?
>
>
>
> warum willst du eine ganze Zeile l�schen? Wenn A gel�scht wird, wird
>
> doch B und C auch gel�scht. Oder sind noch mehr Spalten bef�llt? Das
>
> bl�ht doch alles nur auf und du musst eine MsgBox best�tigen oder
>
> ablehnen was den Ablauf st�rt. Und Eintr�ge l�schen oder ganze Zelle
>
> l�schen ist doch eigentlich das Gleiche.
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3

Mir geht es darum, dass das eventuell jemand bedient, der sich absolut nicht mit Excel auskennt. Dann wäre so eine Abfrage besser. Oder zumindest vielelicth ein Makro, damit mit mit einer Tastenkombination die markierte Zeile löschen kann.

Claus Busch

unread,
Aug 4, 2012, 2:11:35 PM8/4/12
to
Hallo Tobias,

Am Sat, 4 Aug 2012 11:01:37 -0700 (PDT) schrieb fabr...@gmx.de:

> Mir geht es darum, dass das eventuell jemand bedient, der sich absolut nicht mit Excel auskennt. Dann wäre so eine Abfrage besser. Oder zumindest vielelicth ein Makro, damit mit mit einer Tastenkombination die markierte Zeile löschen kann.

gerade wenn Leute damit arbeiten, die wenig bis gar keine Ahnung haben,
sollte man es so unkompliziert wie möglich machen. Wenn jemand einen
Fehler gemacht hat und Zelle A löscht, werden B und C mit gelöscht und
der Cursor bleibt in der Zelle in A und es kann neu gescannt werden. Wo
ist das Problem und warum alles nur noch verkomplizieren?


Mit freundlichen Grüßen

fabr...@gmx.de

unread,
Aug 4, 2012, 2:38:13 PM8/4/12
to
Am Samstag, 4. August 2012 20:11:35 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> Am Sat, 4 Aug 2012 11:01:37 -0700 (PDT) schrieb fabr...@gmx.de:
>
>
>
> > Mir geht es darum, dass das eventuell jemand bedient, der sich absolut nicht mit Excel auskennt. Dann w�re so eine Abfrage besser. Oder zumindest vielelicth ein Makro, damit mit mit einer Tastenkombination die markierte Zeile l�schen kann.
>
>
>
> gerade wenn Leute damit arbeiten, die wenig bis gar keine Ahnung haben,
>
> sollte man es so unkompliziert wie m�glich machen. Wenn jemand einen
>
> Fehler gemacht hat und Zelle A l�scht, werden B und C mit gel�scht und
>
> der Cursor bleibt in der Zelle in A und es kann neu gescannt werden. Wo
>
> ist das Problem und warum alles nur noch verkomplizieren?
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3

Ich muss ihnen absolut Recht geben. Wenn man dann doch eine ganze Zeile entfernen will aus der Liste dann braucht man nur Shift+Leertaste (um die Zeile zu markieren) drücken und dann nur noch Strg+minus dann ist die Zeile weg. Einfacher geht es nicht. Sorry, ich habe mich da wohl etwas verannt.

Ich habe jetzt mal alle anderen Spalten (außer A,B,C) per Blattschutz und Passwort geschützt, weil in anderen Spalten noch Formeln eingetragen sind, die nicht ausversehen gelöscht werden sollen. Aber dann läßt sich ihr Code leider nicht mehr fehlerfrei ausführen.

Der Compiler meldet dann immer einen Laufzeitfehler 1004: Anwendungs oder Objektdefinierter Fehler

Heisst das jetzt ich kann keine Spalten mehr sperren?

Claus Busch

unread,
Aug 4, 2012, 2:59:43 PM8/4/12
to
Hallo Tobias,

Am Sat, 4 Aug 2012 11:38:13 -0700 (PDT) schrieb fabr...@gmx.de:

> Ich habe jetzt mal alle anderen Spalten (au�er A,B,C) per Blattschutz und Passwort gesch�tzt, weil in anderen Spalten noch Formeln eingetragen sind, die nicht ausversehen gel�scht werden sollen. Aber dann l��t sich ihr Code leider nicht mehr fehlerfrei ausf�hren.
>
> Der Compiler meldet dann immer einen Laufzeitfehler 1004: Anwendungs oder Objektdefinierter Fehler

erstens sind wir hier in der Newsgroup und auch in den Foren per du.
Zweitens musst du nur beim Schutz "Zellen formatieren" aktivieren. Denn
dort bleibt dir der Debugger bestimmt stehen.


Mit freundlichen Gr��en

Claus Busch

unread,
Aug 4, 2012, 3:01:32 PM8/4/12
to
Hallo Tobias,

und noch ein Nachtrag:
Wenn du Zeilen l�schen m�chtest, musst du das beim Schutz auch
aktivieren.


Mit freundlichen Gr��en

fabr...@gmx.de

unread,
Aug 4, 2012, 4:51:47 PM8/4/12
to
Am Samstag, 4. August 2012 21:01:32 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> und noch ein Nachtrag:
>
> Wenn du Zeilen l�schen m�chtest, musst du das beim Schutz auch
>
> aktivieren.
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3

Vielen Dank. Das war es. Jetzt funktioniert es wieder fehlerfrei. Super. Das hilft mir enorm.

Mir kommt da gerade noch eine andere Idee in den Sinn:

Ich würde gerne mit einem Funkscanner (mit einem USB Funkempfänger) arbeiten und dann wäre es wichtig, möglichst selten zum Laptop rennen zu müssen. Es gäbe dann mehrere Tabellen und jeder Tabelle würde ein Barcode zugeordnet werden. Dann würde man vorab diesen Barcode scannen, damit sich die dementsprechende Tabelle öffnet, um die eigentlichen Barcodes mit ihren Werten dort einzuscannen zu können. Auf diese Weise könnte man dann zwischen mehreren Tabellen hin und her springen ohne sich jedes mal zum Rechner begeben zu müssen. Und man könnte auf diese Weise Werte in verschiedene Tabellen eintragen. In diesem Fall wäre es dann auch besser alle doppelten Einträge zu erhalten und sie dann einfach nur rot zu markieren. Die eigentliche Korrektur könnte man dann hinterher nach erfolgter Datenerfassung vornehmen.

Das wäre genial, wenn das ginge. Müssten große Änderungen an ihrem Code vorgenommen werden? Und läßt sich per VBA und einem Scan überhaupt eine bestimmte Tabelle öffnen?

fabr...@gmx.de

unread,
Aug 4, 2012, 6:33:55 PM8/4/12
to
Am Samstag, 4. August 2012 21:01:32 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> und noch ein Nachtrag:
>
> Wenn du Zeilen l�schen m�chtest, musst du das beim Schutz auch
>
> aktivieren.
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3


Ich musste gerade leider feststellen, dass sich keine Zeile löschen läßt, trotzdem ich das so eingestellt habe wie von dir beschrieben. Ich habe aber "Zeile auswählen" bei den Gesperrten verboten, darauf kommt es mir ja primär an. Aber anscheinend kann man dann keine Zeile löschen, wenn man sie nicht auch auswählen darf. Verdammt. :-(

Könnte man in dem Code noch einbauen, dass Einträge, wo die Differenz zwischen Wert in Spalte B und Wert in Spalte C weniger als 30 Sekunden beträgt nicht akzeptiert werden, dass heisst sofort wieder gelöscht werden oder gar nicht erst eingetragen weden. Denn bei einer Zeitdifferenz von weniger als 30 Sekunden kann es sich um keinen sinnvollen Eintrag handeln. So wird auch verhindert, dass man beim Scannen versehentlich unsinnige Werte einträgt, weil man zum Biespiel zweimal kurz hintereinander die Scan-Taste gedrückt hat. Ist mir schon ein einige mal passiert. Dann erübrigt sich eigentlich auch das Löschen von Zeilen.

Claus Busch

unread,
Aug 5, 2012, 5:24:31 AM8/5/12
to
Hallo Tobias,

Am Sat, 4 Aug 2012 13:51:47 -0700 (PDT) schrieb fabr...@gmx.de:

> Mir kommt da gerade noch eine andere Idee in den Sinn:
>
> Ich w�rde gerne mit einem Funkscanner (mit einem USB Funkempf�nger) arbeiten und dann w�re es wichtig, m�glichst selten zum Laptop rennen zu m�ssen. Es g�be dann mehrere Tabellen und jeder Tabelle w�rde ein Barcode zugeordnet werden. Dann w�rde man vorab diesen Barcode scannen, damit sich die dementsprechende Tabelle �ffnet, um die eigentlichen Barcodes mit ihren Werten dort einzuscannen zu k�nnen. Auf diese Weise k�nnte man dann zwischen mehreren Tabellen hin und her springen ohne sich jedes mal zum Rechner begeben zu m�ssen. Und man k�nnte auf diese Weise Werte in verschiedene Tabellen eintragen. In diesem Fall w�re es dann auch besser alle doppelten Eintr�ge zu erhalten und sie dann einfach nur rot zu markieren. Die eigentliche Korrektur k�nnte man dann hinterher nach erfolgter Datenerfassung vornehmen.
>
> Das w�re genial, wenn das ginge. M�ssten gro�e �nderungen an ihrem Code vorgenommen werden? Und l��t sich per VBA und einem Scan �berhaupt eine bestimmte Tabelle �ffnen?

erstens wei� ich nicht, welches Ereignis dein Scanner ausl�st und ob und
wie man darauf zugreifen kann. Zweitens m�ssten dann eine Select
Case-Anweisung f�r 497 verschiedene Tabellenbl�tter geschrieben werden.
Also wenn z.B. Scan 50, dann Eintrag in Blatt 50 erste freie Zeile
eintragen usw.
Damit wird alles nur anf�lliger und dann eine Stunde zu scannen, um dann
festzustellen, dass irgendwo ein Fehler aufgetreten ist, ist auch nicht
sinnvoll. Ich w�rde stattdessen ein Rollpult vorschlagen und den Laptop
darauf immer mitnehmen, um eine st�ndige Kontrolle zu haben.
Au�erdem hast du etwas von Berechnungen geschrieben. Willst du dann
Berechnungen �ber 497 Bl�tter durchf�hren?

Au�erdem sind die Newsgroups und Foren eigentlich eine Hilfe zur
Selbsthilfe. Man sollte sich schon das meiste selbst machen k�nnen und
bei speziellen Problemen hier anfragen. Dies ist keine Annahmestelle f�r
Auftragsprogrammierung - die Menschen, die hier antworten, machen das in
ihrer Freizeit.


Mit freundlichen Gr��en

fabr...@gmx.de

unread,
Aug 5, 2012, 6:00:33 AM8/5/12
to
Am Sonntag, 5. August 2012 11:24:31 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> Am Sat, 4 Aug 2012 13:51:47 -0700 (PDT) schrieb fabr...@gmx.de:
>
>
>
> > Mir kommt da gerade noch eine andere Idee in den Sinn:
>
> >
>
> > Ich w�rde gerne mit einem Funkscanner (mit einem USB Funkempf�nger) arbeiten und dann w�re es wichtig, m�glichst selten zum Laptop rennen zu m�ssen. Es g�be dann mehrere Tabellen und jeder Tabelle w�rde ein Barcode zugeordnet werden. Dann w�rde man vorab diesen Barcode scannen, damit sich die dementsprechende Tabelle �ffnet, um die eigentlichen Barcodes mit ihren Werten dort einzuscannen zu k�nnen. Auf diese Weise k�nnte man dann zwischen mehreren Tabellen hin und her springen ohne sich jedes mal zum Rechner begeben zu m�ssen. Und man k�nnte auf diese Weise Werte in verschiedene Tabellen eintragen. In diesem Fall w�re es dann auch besser alle doppelten Eintr�ge zu erhalten und sie dann einfach nur rot zu markieren. Die eigentliche Korrektur k�nnte man dann hinterher nach erfolgter Datenerfassung vornehmen.
>
> >
>
> > Das w�re genial, wenn das ginge. M�ssten gro�e �nderungen an ihrem Code vorgenommen werden? Und l��t sich per VBA und einem Scan �berhaupt eine bestimmte Tabelle �ffnen?
>
>
>
> erstens wei� ich nicht, welches Ereignis dein Scanner ausl�st und ob und
>
> wie man darauf zugreifen kann. Zweitens m�ssten dann eine Select
>
> Case-Anweisung f�r 497 verschiedene Tabellenbl�tter geschrieben werden.
>
> Also wenn z.B. Scan 50, dann Eintrag in Blatt 50 erste freie Zeile
>
> eintragen usw.
>
> Damit wird alles nur anf�lliger und dann eine Stunde zu scannen, um dann
>
> festzustellen, dass irgendwo ein Fehler aufgetreten ist, ist auch nicht
>
> sinnvoll. Ich w�rde stattdessen ein Rollpult vorschlagen und den Laptop
>
> darauf immer mitnehmen, um eine st�ndige Kontrolle zu haben.
>
> Au�erdem hast du etwas von Berechnungen geschrieben. Willst du dann
>
> Berechnungen �ber 497 Bl�tter durchf�hren?
>
>
>
> Au�erdem sind die Newsgroups und Foren eigentlich eine Hilfe zur
>
> Selbsthilfe. Man sollte sich schon das meiste selbst machen k�nnen und
>
> bei speziellen Problemen hier anfragen. Dies ist keine Annahmestelle f�r
>
> Auftragsprogrammierung - die Menschen, die hier antworten, machen das in
>
> ihrer Freizeit.
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3

Ich gebe ihnen natürlich Recht. Ich wollte hier keinen falschen Eindruck erwecken. Natürlich ist mir bewusst, dass das hier nur Hilfe zur Selbsthilfe sein kann. Und sie haben mir schon extrem geholfen. Bitte vergessen sie einfach was ich da geschrieben habe. Nochmals Danke.

Aber könnten sie mir vielleicht noch sagen, oder einen Tipp geben, ob es möglich ist Scans nicht zu akzeptieren, wenn die Differenz von Wert in Spalte C minus Wert in Spalte B kleiner als x ist? Mein Problem ist, dass in den Spalten B und C Uhrzeiten eingetragen werden und mit Uhrzeiten kann man nicht rechnen. Es sollte quasi nicht nur doppelte Einträge verhindert werden, wie von ihnen schon wunderbar implementiert wurde, sondern auch Einträge die kürzer sind als 30 Sekunden.

Das wäre eine unglaublich Arbeitserleichterung. Man müsste quasi kaum noch auf den Monitor schauen, da eigentlich keine unsinnigen Einträge mehr entstehen.

Aber geht das überhaupt per VBA und wie kompliziert ist das?

Claus Busch

unread,
Aug 5, 2012, 7:03:24 AM8/5/12
to
Hallo Tobias,

Am Sun, 5 Aug 2012 03:00:33 -0700 (PDT) schrieb fabr...@gmx.de:

> Aber könnten sie mir vielleicht noch sagen, oder einen Tipp geben, ob es möglich ist Scans nicht zu akzeptieren, wenn die Differenz von Wert in Spalte C minus Wert in Spalte B kleiner als x ist? Mein Problem ist, dass in den Spalten B und C Uhrzeiten eingetragen werden und mit Uhrzeiten kann man nicht rechnen. Es sollte quasi nicht nur doppelte Einträge verhindert werden, wie von ihnen schon wunderbar implementiert wurde, sondern auch Einträge die kürzer sind als 30 Sekunden.
>
> Das wäre eine unglaublich Arbeitserleichterung. Man müsste quasi kaum noch auf den Monitor schauen, da eigentlich keine unsinnigen Einträge mehr entstehen.

wieso sollte man mit uhrzeiten nicht rechnen können? Das geht in Excel
ebenso wie in VBA. 24 Stunden sind 1 Tag und werden als 1 intern
gespeichert. Kleinere Zeiteinheiten sind dann ein Bruchteil von 1. 6
Stunden werden so als 0,25 gespeichert, aber wenn es korrekt formatiert
ist als 6 Stunden angezeigt.
Probiere es so:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A3:A500")) Is _
Nothing Or Target.Count > 1 Then Exit Sub
Dim myRow As Long

If WorksheetFunction.CountIf(Range("A3:A500"), Target) = 1 Then
Target.Offset(0, 1) = Format(Time, "hh:mm:ss")
Range(Cells(3, 1), Cells(Target.Row - 1, 1)) _
.Interior.ColorIndex = xlNone
ElseIf WorksheetFunction.CountIf(Range("A3:A500"), _
Target) = 2 Then
If WorksheetFunction.VLookup(Target, Range("A3:C500"), _
3, 0) > 0 Then
Cells(WorksheetFunction.Match(Target, Range("A1:A500"),
_
0), 1).Interior.ColorIndex = 3
Target.ClearContents
Target.Select
Else
myRow = WorksheetFunction.Match(Target, Range("A1:A500"), 0)
If Time - Cells(myRow, 2) < TimeValue("00:00:30") Then
Target.ClearContents
Target.Select
Else
Cells(myRow, 3) = Format(Time, "hh:mm:ss")
Range(Cells(3, 1), Cells(Target.Row - 1, 1)) _
.Interior.ColorIndex = xlNone
Target.ClearContents
Target.Select
End If
End If
ElseIf Len(Target) = 0 Then
Target.Offset(0, 1).Resize(1, 2).ClearContents
End If
End Sub


Mit freundlichen Grüßen

Claus Busch

unread,
Aug 5, 2012, 7:18:06 AM8/5/12
to
Hallo Tobias,

der Code ist jetzt etwas unübersichtlich mit dem 3-fach verschachtelten
IF-Block. Wenn alle Anforderungen von Anfang an festgestanden hätten,
hätte ich den Code anders geschrieben.

fabr...@gmx.de

unread,
Aug 5, 2012, 9:28:23 AM8/5/12
to
Am Sonntag, 5. August 2012 13:18:06 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> der Code ist jetzt etwas un�bersichtlich mit dem 3-fach verschachtelten
>
> IF-Block. Wenn alle Anforderungen von Anfang an festgestanden h�tten,
>
> h�tte ich den Code anders geschrieben.
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3

Funktioniert super. Vielen Dank. Das war jetzt mehr Hilfe als ich zu träumen gewagt hätte.

Reicht es eigentlich die Target.ClearContents Anweisung zu entfernen, wenn man doch doppelte Einträge in Spalte A zulassen will und sie nur rot markieren möchte? Der Code müsste dann doch wieder etwas einfacher bzw. übersichtlicher werden, oder?

Claus Busch

unread,
Aug 5, 2012, 11:56:32 AM8/5/12
to
Hallo Tobias,

Am Sun, 5 Aug 2012 06:28:23 -0700 (PDT) schrieb fabr...@gmx.de:

> Reicht es eigentlich die Target.ClearContents Anweisung zu entfernen, wenn man doch doppelte Einträge in Spalte A zulassen will und sie nur rot markieren möchte? Der Code müsste dann doch wieder etwas einfacher bzw. übersichtlicher werden, oder?

nein, nicht ganz so einfach, weil ja normalerweise beim 2. Scannen in C
geschrieben wird und erst bei einem dritten Scan gelöscht wird.
D.h. du musst dann auch schauen, was in C passieren soll, wenn du
doppelte Einträge zulässt. Übersichtlicher und einfacher wird der Code
aber dadurch nicht, weil dafür dann für C ja weitere Bedingungen
hinzukommen.


Mit freundlichen Grüßen

fabr...@gmx.de

unread,
Aug 5, 2012, 1:48:41 PM8/5/12
to
Am Sonntag, 5. August 2012 17:56:32 UTC+2 schrieb Claus Busch:
> Hallo Tobias,
>
>
>
> Am Sun, 5 Aug 2012 06:28:23 -0700 (PDT) schrieb fabr...@gmx.de:
>
>
>
> > Reicht es eigentlich die Target.ClearContents Anweisung zu entfernen, wenn man doch doppelte Eintr�ge in Spalte A zulassen will und sie nur rot markieren m�chte? Der Code m�sste dann doch wieder etwas einfacher bzw. �bersichtlicher werden, oder?
>
>
>
> nein, nicht ganz so einfach, weil ja normalerweise beim 2. Scannen in C
>
> geschrieben wird und erst bei einem dritten Scan gel�scht wird.
>
> D.h. du musst dann auch schauen, was in C passieren soll, wenn du
>
> doppelte Eintr�ge zul�sst. �bersichtlicher und einfacher wird der Code
>
> aber dadurch nicht, weil daf�r dann f�r C ja weitere Bedingungen
>
> hinzukommen.
>
>
>
>
>
> Mit freundlichen Gr��en
>
> Claus Busch
>
> --
>
> Win XP Prof SP3 / Vista Ultimate SP2
>
> Office 2003 SP3 /2007 Ultimate SP3

Vielen Dank für die Information.

Wie schaut es aus mit dem Markieren des zuletzt durchgeführten Scans? Wäre das einfacher zu realisieren?

Denn bei sehr langen Listen wäre diese Markierung absolut sinnvoll, um nicht den Überblick zu verlieren, weil ja beim Eintragen in Spalte C hin und her gesprungen wird. Dann wüsste man immer welchen Wert man zuletzt gescannnt hat. Dan hätte man rot für doppelte Scans und z.B. blau für den aktuellen Scan.
0 new messages