Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1324to1328
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Scanner-Wert zählen wenn Bedingung erfüllt
04.08.2013 23:17:59
Dietmar
Hallo in die Abendrunde,
mit folgendem Code - natürlich hier aus dem Forum :-) - gelingt es mir, dass ich mit einem Scanner den Code in Zelle B2 erfasse, der dann als Zählwert unmittelbar rechts neben der Nummer eingetragen wird, die in Spalte B im Bereich 'RnG As Range' (ab Zeile 7) aufgeführt ist.
Nun möchte ich das modifizieren: Der Zählwert soll nun NICHT mehr direkt in Rng.Offset(, 1) - also direkt rechts daneben - eingetragen werden, sondern in Abhängikeit von einem Eintrag in Zeile 4.
Und zwar soll der Zählwert in derjenigen Spalte eingetragen werden, wo in Zeile 4 das Wort 'Inventur' steht.
Herzlichen Dank für jede Hilfe.
Dietmar aus Aachen
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B2")) Is Nothing Then If Target "" And IsNumeric(Target) Then Dim Wert$, Bereich, RnG As Range Wert = Target.Value Set Bereich = Range("CodeNr") For Each RnG In Bereich If RnG.Value = Wert Then RnG.Offset(, 1) = RnG.Offset(, 1) + Cells(2, 3) Next Range("B2").Select End If End If Range("B2").ClearContents 'Wenn Eintrag in C2, dann soll anschließend B2 selected werden, weil als nächstes ja der Code _ folgt (Dietmar) If Not Intersect(Target, Range("C2")) Is Nothing Then If Target "" And IsNumeric(Target) Then Range("B2").Select End If End If End Sub

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Scanner-Wert zählen wenn Bedingung erfüllt
04.08.2013 23:54:47
Gerd
Hallo Dietmar!
Dim Spalte As Variant
Spalte = Application.Match("Inventur", Rows(4), 0)
If IsError(Spalte) Then MsgBox "Inventur fehlt!": Exit Sub
Die Nummer der Spalte kannst du dann einsetzen.
Gruß Gerd

hmmmh, verstehe ich leider nicht
05.08.2013 00:21:12
Dietmar
Hallo Gerd,
vielen Dank für Deine Hilfe. Aber wahrscheinlich verstehe ich Dich da nicht richtig.
Ich möchte ja keine Spalte eintragen, sondern der Zählwert soll von alleine in diejenige Spalte eingetragen werden, wo in der Zeile 4 das Wort 'Inventur' steht.
Oder mache ich beim Ergänzen meines Codes da einen Fehler?
Vielen Dank.
LG Dietmar

Anzeige
Gerd will so die Spalte ermitteln, in der in ...
05.08.2013 01:11:09
Luc:-?
…Zeile4 das Wort Inventur steht, Dietmar;
den Wert von Spalte kannst du dann in deinem PgmCode entsprd verwenden.
Allerdings würde ich Folgendes bevorzugen:
…
Dim Spalte As Long
On Error GoTo fx
…
On Error Resume Next
Spalte = WorksheetFunction.Match("Inventur", Rows(4), 0)
On Error GoTo fx
If CBool(Spalte) Then
…
Else: Err.Raise xlErrNA
End If
…
fx: If CBool(Err.Number) Then
If Err.Number = xlErrNA Then
MsgBox "Inventur fehlt!", vbCritical, "Fehler " & Err.Number
Else: MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
End If
End If
Set Bereich = Nothing
…
End Sub
Du solltest dir angewöhnen, immer eine ordentliche Fehlerbehandlung einzubauen, um evtl andere Nutzer nicht zu verwirren.
Gruß Luc :-?

Anzeige
Danke ...
05.08.2013 17:45:37
Dietmar
Hallo Luc,
vielen Dank!
In Kombination mit dem Beitrag von Matthias wird es wohl zum richtigen Ergebnis führen.
Hatte dummerweise nicht auf meine vergangenen Beiträge zum Ausgangsthema verlinkt.
Ich verspreche Besserung :-)
LG
Dietmar

AW: Scanner-Wert zählen wenn Bedingung erfüllt
05.08.2013 01:47:56
Matthias
Hallo Dietmar
Das heißt also, wie hier willst Du in B9 nicht mit C2 addieren weil in B4 nicht Inventur steht?

 ABCDEFGH
1 CodeNr.Anzahl     
2Einträge >>10210     
3        
4    Inventur   
5        
6Code-Nr.Anzahl Code-Nr.Anzahl Code-Nr.Anzahl
71003 200  300 
81013 20120 301 
910220 202  302 
10103  203  303 
11104  204  304 


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
wäre die CodeNr. 201 so willst Du addieren weil in E4 Inventur steht?
Du solltest immer zum "Vorbeitrag" verlinken, so haben es Andere leichter sich da reinzudenken.
https://www.herber.de/forum/archiv/1320to1324/t1322986.htm#1323162
Gruß Matthias

Anzeige
ups, erwischt :-/ Du hast recht ...
05.08.2013 17:55:28
Dietmar
Hallo Matthias,
Respekt! Super recherchiert :-)
Du hast recht, das hätte ich tun sollen! Ich verspreche auch an dieser Stelle Besserung :-)
Also, das hast Du genau richtig erkannt. (Wobei ich dann natürlich die Codes in den Spalten B,D und G identisch sind).
Die Eintragungen des Wortes "Inventur" möchte ich dann über mehrere miteinander verknüpfte Options-Butttons realisieren.
Hintergrund: Die Musterdatei werde ich dann "übersetzen" und in meine Real-Datei einbauen. Diese bedient mehrere "Filialen", in denen Inventuren gemacht werden müssen.
Besten Dank für die tolle Hilfe!
Ich schau dann mal, wie ich den Code-Schnipsel von Luc einbauen kann. Hoffe, dass das dann der richtige Weg ist.
LG Dietmar

Anzeige
AW: Streichhölzer u. a. Matches
05.08.2013 20:28:33
Gerd
Ich schau dann mal, wie ich den Code-Schnipsel von Luc einbauen kann.
Hallo Dietmar,
das ist für diesen Zweck kein Schnipsel, sondern ein Elefant.
Allein deshalb, weil er sich weigert, Application.Match statt Worksheetfunction.Match
zu nutzen u. lieber eine Riesenfehlerbehandlung drumrumschreibt. :-)
Gruß Gerd

Hauptsache ...
05.08.2013 23:37:26
Dietmar
Hallo Gerd,
... es wird dann hell :-)
Ich schau mal, ob ich klarkomme.
Viele Grüße
Dietmar

F-Behdl pgmm ich immer, Gerd, und wenn ...
06.08.2013 01:06:15
Luc:-?
…du das schon für einen „Elefanten“ hältst, kann ich dich gern beruhigen, das ist nicht mal 'ne Mücke. Die meiner UDFs, die du im Archiv findest, gehören durch die Bank zu den kürzeren. Mehrere 100 PgmZeilen sind auch bei UDFs für mich nicht ungewöhnlich… :->
Ansonsten fände ich es nicht so gut, falls du mit deiner Bemerkung den Sinn von F-Behdlgg auch generell infrage stellen wolltest. Die sieht man hier ohnehin nur selten… :-|
Und wenn ein Container nun mal da ist, nutze ich ihn auch. Weiß der (MS-)Teufel, warum der einen (vom VBE-Intellisense nicht unterstützten) Nebeneingang hat! Aber das hatten wir ja schon…
Gruß Luc :-?

Anzeige
AW: Hi Luc, nicht wegen ansonsten .. o.w,T.
06.08.2013 20:52:20
Gerd
Gruß Gerd

AW: ups, erwischt :-/ Du hast recht ...
05.08.2013 23:44:12
Matthias
Hallo Dietmar
Super recherchiert
Nöö, ich weiß doch wo Beiträge stehen in denen ich teilgenommen habe
Eigentlich brauchst Du nur die Zeile(4) prüfen, in deren Spalte sich die Variable(Rng) gerade befindet.
Steht dort Inventur dann addiere zur CodeNr den Wert aus C2
For Each RnG In Bereich
If RnG.Value = Wert Then
If Cells(4, RnG.Column).Text = "Inventur" Then
RnG.Offset(, 1) = RnG.Offset(, 1) + Cells(2, 3)
Else
MsgBox "Die Spalte (" & RnG.Column & ") mit der CodeNr. steht NICHT auf Inventur!"
End If
End If
Next



https://www.herber.de/bbs/user/86730.xls
Gruß Matthias

Anzeige
kleine Korrektur ...
06.08.2013 06:19:27
Matthias
Hallo Dietmar
Pack mal noch ein Exit Sub unter die MsgBox
Es gibt ja jede CodeNr. nur 1x also kann die Schleife ab da beendet werden.
For Each RnG In Bereich
If RnG.Value = Wert Then
If Cells(4, RnG.Column).Text = "Inventur" Then
RnG.Offset(, 1) = RnG.Offset(, 1) + Cells(2, 3)
Else
MsgBox "Die Spalte (" & RnG.Column & ") mit der CodeNr. steht NICHT auf Inventur!"
Exit Sub
End If
End If
Next
Gruß Matthias

Exit For (nicht Exit Sub)
06.08.2013 06:34:12
Matthias
Hallo Dietmar
noch ne Korrektur der Korrektur ;-)
For Each RnG In Bereich
If RnG.Value = Wert Then
If Cells(4, RnG.Column).Text = "Inventur" Then
RnG.Offset(, 1) = RnG.Offset(, 1) + Cells(2, 3)
Else
MsgBox "Die Spalte (" & RnG.Column & ") mit der CodeNr. steht NICHT auf Inventur!"
Exit For
End If
End If
Next
Es soll ja nur die Schleife verlassen werden.
Gruß Matthias

Anzeige
Funzt! Ergänzungsfrage Prüfung vor Change-Ereignis
06.08.2013 19:25:32
Dietmar
Hallo Matthias,
herzlichen Dank! Geht richtig gut.
Jetzt wäre noch eine "Kleinigkeit".
Wie kann ich sicherstellen, dass das Change-Ereignis NUR ausgeführt wird, WENN der Eintrag (der ja vom Scanner kommt) in B2 erfolgt ist.
Wenn also nicht B2 selected ist, würde der Code ja zum einen nicht funktionieren und zum zweiten würden 13-stellig Nummern (EAN 13) eingetragen wo sie ggf. nicht hinsollen.
Es soll also kein Change-Ereignis stattfinden , wenn nicht B2 vor dem Eintrag selected war. Dann Msgbox mit Warnung.
ODER wenn das geht: VOR der Ausführung des Change-Ereignisses B2 markieren.
Ich habe rumprobiert, aber irgendwie beißt sich die Katze ständig in den Schwanz, bzw. eine vorgeschaltete If-Intersect-Prüfung wird gar nicht beachtet.
Oder kann ich das nur über eine Sperrung aller anderen Zellen erreichen?
LG
Dietmar

Anzeige
Prüfung vor Change-Ereignis
07.08.2013 00:13:26
Matthias
Hallo
Wie kann ich sicherstellen, dass das Change-Ereignis NUR ausgeführt wird, WENN der Eintrag (der ja vom Scanner kommt) in B2 erfolgt ist.
'
Genau das macht doch der Code


Ich habe rumprobiert, aber irgendwie beißt sich die Katze ständig in den Schwanz, bzw. eine vorgeschaltete If-Intersect-Prüfung wird gar nicht beachtet.
'
in meiner geposteten Datei klappt das doch ohne Probleme
Ich habe sogar eine Scanner-Simulation in meine Testdatei eingepflegt um zu Testen.
Das heißt ich generiere per Zufall eine CodeNr, dies schreibe ich dann in B2.
Dazu mus B2 noch nicht einmal die aktive Zelle sein!
Auch da klappt alles wunderbar!
Gern kannst Du das was Du bis jetzt hast ja hier hochladen, dann wäre es sicher auch einfacher Dir zu helfen.
Userbild

Anzeige
Hier meine Datei
07.08.2013 00:29:44
Dietmar
Hallo Matthias,
hier meine Testdatei.
Ich bin sehr gespannt. Du findest in VBA auch ein paar Versuche, die ich aber wieder auskommentiert habe, weil sie nicht funktionierten.
https://www.herber.de/bbs/user/86740.xls
Viele erwartungsvolle Grüße
Dietmar

keine relevanten Probleme ...
07.08.2013 05:08:09
Matthias
Hallo
... aber hier ist schon mal ein ganz kleiner "Bock" drin ;-)
Sub Schaltfläche2_Klicken()
Application.ScreenUpdating = False
Application.EnableEvents = False
Range("C2").Value = Range("C2").Value - 1
Range("B2").Select
Application.ScreenUpdating = False
Application.EnableEvents = True
End Sub
da sollte (wenn schon) auch True stehen.
Sub Schaltfläche2_Klicken()
With Application
.ScreenUpdating = False
.EnableEvents = False
Range("C2").Value = Range("C2").Value - 1
Range("B2").Select
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Ansonsten habe ich Nichts feststellen können was nicht funktioniert.
Du kannst natürlich beim Activate-Ereignis auch ScrollArea setzen
Private Sub Worksheet_Activate()
ActiveSheet.ScrollArea = "B2"
End Sub
Damit sperrst Du Dich aber selbst aus weil Du so
in D3 im Inventurblatt keine Filiale mehr setzen kannst.
Es sei denn Du regelst das über 3 Optionbutton.
Sorry, aber ...
Generell verstehe ich nicht warum Du unbedingt B2 aktivieren musst.
Gruß Matthias

Herzlichen Dank ... andere Idee
08.08.2013 09:07:38
Dietmar
Hallo Matthias,
lieben Dank für Deine Mühe. Die 'Bock' habe ich erlegt :-)
Ich finde es immer wieder toll, wie mir hier im Forum geholfen wird!
Ich denke, dass ich jetzt vermutlich alle machbaren Möglichkeiten zusammen habe, um das Thema "Sanner" in meine O-Datei zu implementieren. Ganz so wie ich es mir vorgestellt habe, ist es zwar nicht, aber ich komme jetzt gut klar.
Die Königslösung wäre gewesen, dass es so einen Befehl gibt wie: 'before scannerimpuls, prüfe, ob zelle b2 selected ist, wenn nicht gehe zu zelle b2 und generiere dann das Change-Ereignis'
Da aber der Scannereintrag nichts anderes ist wie ein Tastatureintrag, geht das wohl gar nicht.
Andere Idee (die vielleicht zum Ziel führt): Es handelt sich ja um einen EAN-13-Code, den der Scanner einrägt. D.h. der Scanner trägt in die aktive Zelle immer eine 13-stellige Zahl ein. Könnte man in das Change-Ereignis vielleicht eine vorverlagerte Prüfung einbauen nach dem Motto 'wenn Länge 13, dann trage diesen Wert in B2 ein und realisiere dann das Change-Ereignis'. Ist nur so ein Gedanke :-)
Whatever, ich käme aber auch so gut klar.
Viele Grüße
Dietmar

hier noch mal meine Scannersimulation
09.08.2013 08:02:33
Matthias
Hallo Dietmar
Zitat:
D.h. der Scanner trägt in die aktive Zelle immer eine 13-stellige Zahl ein.
Und wenn in dieser Zelle ne Formel steht ?
Wird die vom Scannerimpuls überschrieben ? - na dann viel Glück.
Ich würde es, wie vorgeschlagen mit

ScrollArea = "B2"
versuchen
Hier nochmal mein Versuch mit dem zufälligen Scannereintrag in B2
Vielleicht kannst Du daraus was für Dich umsetzen.
https://www.herber.de/bbs/user/86767.xls
Gruß Matthias

372 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige