Anzeige
Archiv - Navigation
1400to1404
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
Inhaltsverzeichnis

Externen Dateneingang korrekt darstellen

Externen Dateneingang korrekt darstellen
20.01.2015 10:16:07
Hans
Hallo!
nach dem ich mein Umfangreiches Excelunterfangen dank dieses Forums kurz vor dem Abschluss habe nun eine weitere Frage:
ich habe über einen Com Port einen externen Dateneingang. Diesen konnte ich auch in Excel einbinden. Leider wird es nicht so ganz korrekt dargestellt. So kommen die Daten in der Zelle an:
$ 2000 0 +' 0200
Ich möchte allerdings nur die "2000" herausfiltern. Der Rest ist uninteressant und soll einfach herausgefiltert werden.
Der Bereich in dem "2000" steht ist das einzig interessante und kann Werte zwischen 1000 und 60000 annehmen können. alles andere soll einfach nicht dargestellt werden.
die com port einbindung sieht bei mir so aus:
Private Sub StrokeReader1_CommEvent(ByVal Evt As StrokeReaderLib.Event, ByVal data As Variant)
Select Case Evt
Case EVT_DISCONNECT
MsgBox "Terminal disconnected"
Case EVT_CONNECT
MsgBox " Terminal Connected"
Case EVT_DATA
barcode = StrConv(data, vbUnicode)
Cells(6, 9) = barcode
End Select
End Sub

beste Grüße
Hans

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

Betreff
Datum
Anwender
Anzeige
AW: Externen Dateneingang korrekt darstellen
20.01.2015 10:37:53
yummi
Hallo Hans,
den Teil den du herausfiltern willst steht immer zwischen dem 1. und 2. Leerzeichen?
oder was ist der Entscheidungsgrund was du filtern willst?
Gruß
yummi

AW: Externen Dateneingang korrekt darstellen
20.01.2015 10:40:58
Hans
im prinzip ja. das könnte ein gutes kriterium sein!

AW: Externen Dateneingang korrekt darstellen
20.01.2015 10:49:23
yummi
Hallo Hans,
dann evtl so:

Private Sub StrokeReader1_CommEvent(ByVal Evt As StrokeReaderLib.Event, ByVal data As Variant)
dim pos1 as integer
dim pos2 as integer
Select Case Evt
Case EVT_DISCONNECT
MsgBox "Terminal disconnected"
Case EVT_CONNECT
MsgBox " Terminal Connected"
Case EVT_DATA
barcode = StrConv(data, vbUnicode)
pos1 = InStr(1, barcode, " ", vbTextCompare)
pos2 = InStr(pos1+1, barcode, " ", vbTextCompare)
Cells(6, 9) = Mid(barcode,pos1,pos2-pos1)
End Select
End Sub
ist ungetestet, falls ein Zeichen zuwenig dargestellt wird musst du bei pos2-pos1 dann noch 1 dazuzählen
gruß
yummi

Anzeige
AW: Externen Dateneingang korrekt darstellen
20.01.2015 11:03:03
Hans
funktioniert leider doch nicht, da nicht immer die gewünschte Zahl zwischen dem ersten und den zweiten leerzeichen ist...sorry für die falsche info..
kriterien könnten sein: 4bis5stellige ganze zahl die NICHT hinter dem Ausdruck "0 +'" steht

AW: Externen Dateneingang korrekt darstellen
20.01.2015 11:49:19
yummi
Hallo Hans,
im Prinzip kannst Du mit den beiden InStr Zeilen nach allem im String suchen was Du willst, Du musst nur wissen wonach Du suchen willst.
Z.B. nach "$ " und von da ab nach dem nächsten " "
Ich kenn ja nur den einen String den du gezeigt hast.
Gruß
yummi

AW: Externen Dateneingang korrekt darstellen
20.01.2015 12:40:04
Hans
Den String den du gesehen hast ist wie jeder string aussieht. Nur der eine Wert ändert sich

Anzeige
AW: Externen Dateneingang korrekt darstellen
20.01.2015 12:50:37
yummi
jetzt widersprichst du dir aber:
zitat:
funktioniert leider doch nicht, da nicht immer die gewünschte Zahl zwischen dem ersten und den zweiten leerzeichen ist...sorry für die falsche info..
Wenn sich nur der eine Wert ändert, dann würde es ja gehen.
Kannst Du mir noch einen String zeigen wo es nicht passt?
Gruß
yummi

AW: Externen Dateneingang korrekt darstellen
20.01.2015 20:11:21
Hans
entschuldige die späte Antwort und die verwirrenden Aussagen.
Das Problem entsteht dadurch dass der String nicht als ganzer string ankommt sondern in "einzelnen Teilen". also "$ " "2000 0" "0+ " usw usf.
Man müsste also erst einmal den String sortieren. ZB in dem man sagt dass er ersteinmal auf ein $ Zeichen warten soll, dann folgt der String bis zum nächsten $ Zeichen. Wenn man es in dieser Weise sortiert hätte würde die "mid" funktion funktionieren

Anzeige
AW: Externen Dateneingang korrekt darstellen
21.01.2015 09:35:51
yummi
Hallo Hans,
also bekommst du pro Datensatz 3 Strings und du willst nur den 1. Teil des 2. Strings haben?
dann könnte man das auch so machen:

Dim bMerker As Boolean     'diese Variable definierst du ausserhalb der Funktionen in dem  _
selben Modul wie die folgende Funktion
Private Sub StrokeReader1_CommEvent(ByVal Evt As StrokeReaderLib.Event, ByVal data As Variant)
Dim bData As Boolean
Dim pos As Integer
Select Case Evt
Case EVT_DISCONNECT
MsgBox "Terminal disconnected"
Case EVT_CONNECT
MsgBox " Terminal Connected"
Case EVT_DATA
barcode = StrConv(data, vbUnicode)
If bMerker = True Then
bMerker = False
pos = InStr(1, barcode, " ", vbTextCompare)
If pos  0 Then
Cells(6, 9).Value = Left(barcode, pos)
End If
End If
If InStr(1, barcode, "$", vbTextCompare)  0 And bMerker = False Then
bMerker = True
End If
End Select
End Sub
Das funktioniert jetzt so:
Es wird eingelesen bis ein $ gefunden wird. Dann wird ein Merker gesetzt.
Wenn der Merker gesetzt ist, wird der nächste String ausgewertet und der merker wieder freigegeben
Dann wird solange weiter ignoriert bis der nächte $ kommt und der Merker wird wieder gesetzt
Wenn ich den Datenstrom jetzt richtig verstanden habe, dann sollte es so gehen.
Gruß
yummi
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige