Ich bekomme von einer Hardware per RS232 einen String mit 60 Zeichen zurück. Siehe Anhang. Der String beinhaltet wie gesagt die 60Zeichen. Wie kann ich in VBA einen String in ein Array (Interger oder Char)kopieren ?
und wenn du sowas blockartiges hast schau dir gleichmal "split" an ;) das kann dir glaubich das leben auch noch erleichtern... 73
Dim text_ascii As String Dim data() As String ReDim data(60) text_ascii = "341123kjlhasdd1234" 'Als Beispiel data = Split(text_ascii, ",") Worksheets("Tabelle1").Cells(1, 1) = data(1) ...und da erscheint in EXCEL eine Fehlermeldung: Laufzeitfehler '9'.Index außerhalb des gültigen Bereiches
Könntest du mal beschreiben,was du denkst, was die von dir geschriebenen VBA Zeilen eigentlich tun (sollen)?
das mit dem Laufzeitfehler ist klar. wenn du split verwendest, dann muss der trenner, in deinem Beispiel "," auch im String vorhanden sein, ansonnsten wird der gesamte string in das element 0 deines Stringarrays geschrieben. Wenn dein Antwortstring immer die gleiche Länge hat und du auch weißt, an welcher Position du welche Daten erwartest, dann verwende den Mid befehl. mfg Thomas
Ich hab es jetzt mal so versucht. Damit bin ich aber nicht ganz zufrieden. Ich weiss nicht wie man in EXCEL (VBA) das Abschlusszeichen eines Strings feststellen kann. Das Problem ist, dass die Hardware immer einen String sendet aber unterschiedlich lang. z.B. manchmal 55 Zeichen dann wieder 100 Zeichen. Mein VBA Programm soll das Abschluss zeichen detektieren können und dann die Schleife verlassen. Wie kann ich das machen?
was hast du denn für eine Hardware? bei der seriellen übertragung gibt es immer ein Protokoll. wenn du das protokoll nicht kennst, dann kannst du ja den empangenen string nicht auswerten. schreib mal, was du dranhängen hast, vieleicht kommen wir dann weiter
Moin! Hm... Meinst du so etwas? MfG Claes in Lund, Schweden claesg (at) algonet.se
Es werden immer 51 Zeichen gesendet.Darin ist auch die Stringterminierung vorhanden. An der Hardware kann ich nix verändern. Die Hardware ist so ausgelegt das ich immer nur Daten von der seriellen Schnittstelle lesen kann. Der Abschluss eines Strings besteht doch aus den beiden Zeichen oder? ASCII Werte: 10 13 WIe kann ich in EXCEL VBA die beiden Zeichen abfragen?
das sendet die Hardware. 23456 4444 FA FF 33 44 77 23 Das heisst nach der 23 muss ich auf "\0" (Enderkennung) prüfen. Wie geht das in VBA EXCEL? In C ist das kein Problem.
probiers mal so: dim Buffer as string Private Sub UserForm_Initialize() MSComm1.CommPort = 1 MSComm1.Settings = "4800,E,7,1" MSComm1.RThreshold = 1 MSComm1.PortOpen = True end sub Private Sub UserForm_Terminate() On Error Resume Next MSComm1.Close End Sub Private Sub MSComm1_OnComm() Dim strArray() As String Dim tmpbuffer As String Select Case MSComm1.CommEvent Case comEventBreak ' A Break was received. Label1.Caption = "Break" Case comEventCDTO ' CD (RLSD) Timeout. Label1.Caption = "CD Timeout" Case comEventCTSTO ' CTS Timeout. Label1.Caption = "CTS Timeout" Case comEventDSRTO ' DSR Timeout. Label1.Caption = "DSR Timeout" Case comEventFrame ' Framing Error Label1.Caption = "Frame Error" Case comEventOverrun ' Data Lost. Label1.Caption = "Data Lost" Case comEventRxOver ' Receive buffer overflow. Label1.Caption = "RX Overflow" Case comEventRxParity ' Parity Error. Label1.Caption = "Parity Error" Case comEventTxFull ' Transmit buffer full. Label1.Caption = "TX Full" Case comEventDCB ' Unexpected error retrieving DCB Label1.Caption = "DCB Error" Case comEvSend '1 Send event. Case comEvCD '5 Change in carrier detect line. Case comEventTxFull Case comEvReceive '2 Receive event. buffer = buffer & MSComm1.Input tmpPos = InStr(1, buffer, vbLf) ' 2. endzeichen überprüfen If tmpPos > 0 Then ' da ist ein VBLF drin, also verarbeiten strArray = Split(buffer, vbCr & vbLf) For cnt = 0 To UBound(strArray()) - 1 'nur bis zum vorletzten Array, da das letzte schon weider was vom neuen enthalten könnte ' hier die empfangenen Daten splitten und verschicken Next cnt buffer = strArray(UBound(strArray())) End If End Select End Sub Wenn du net zurechtkommst, dann schick einfach mal das Excelfile mfg thomas
Hi, habe ein aehnliches Problem, nur, dass ich vorher noch eine Anfrage senden muss. Und da liegt das Problem. Ich habe zwar die Telegramstruktur, aber keine Ahnung, wie ich das Ganze ueber die serielle Schnittstelle schicke. Kann mir da vielleicht jemand helfen? Die Struktur ist folgende: ESC - Escape 1BH DBx - Data Byte Nr. x >= 20H CR - Carriage Return 0DH LF - Line Feed 0AH BCC - Checksum Byte >= 20H Fuer weitere Info bitte mailen. DAnke.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.