2017-01-11 5 views
0

Ich habe versucht, Daten aus. TXT-Datei zu extrahieren, wie unten unter Codierung beschrieben. Ich habe jedoch keine Idee, wie ich den negativen Wert beibehalten kann, wenn ich die Codierung benutze, wird das negative Zeichen fehlen. Bitte helfen Sie.VBA Codierung zum Extrahieren von Daten aus der TXT-Datei

enter image description here

Private Sub CommandButton1_Click() 

Dim myFile As String, text As String, textline As String, Point1 As Integer, LastRow As Long, Filename As String, x As Variant 

'Open File Location 
myFile = Application.GetOpenFilename() 

'Read the data file 
Open myFile For Input As #1 

Do Until EOF(1) 
Line Input #1, textline 
text = text & textline 

Loop 

Close #1 'Close data file 

'Defined starting point 
Point1 = InStr(text, "Coord. Z") 

'Adding new line 
LastRow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row + 1 

'Get Module S/N from filename 
strFilePath = myFile 
Filename = Replace(Dir([strFilePath]), ".txt", "") 

'Location of the data 
Sheet2.Range("A" & LastRow).Value = Filename 
Sheet2.Range("B" & LastRow).Value = Mid(text, Point1 + 21, 8) 
Sheet2.Range("C" & LastRow).Value = Mid(text, Point1 + 36, 8) 
Sheet2.Range("D" & LastRow).Value = Mid(text, Point1 + 54, 8) 
Sheet2.Range("E" & LastRow).Value = Mid(text, Point1 + 70, 8) 
Sheet2.Range("F" & LastRow).Value = Mid(text, Point1 + 84, 8) 
Sheet2.Range("G" & LastRow).Value = Mid(text, Point1 + 103, 8) 

`End Sub 

Antwort

0

Angenommen die Textdatei enthält nur eine Zeile mit Coord. Z und die Werte sind durch Leerzeichen getrennt. Sie können auch nach dieser Zeile suchen und sie mithilfe des folgenden Codes in ein Array aufteilen.

Dim vTmp as variant 
Dim i as long, j as long 

Do Until EOF(1) 
Line Input #1, textline 
If InStr(text, "Coord. Z") then vTmp = split(textline, " ") 
Loop 

Dieser Code stellt ein Array VTMP die verkettet Zeichen enthält (oder leeren Einträge, wenn Doppelräume vorhanden sind)

Next-Schleife durch die sich ergebende Anordnung und die Werte in Ihrem Blatt auszugeben.

j = 1 'Start column 

'Loop through array 
For i = LBound(vTmp) to UBound(vTmp) 
    If vTmp(i) <> "" 'If entry is not empty 
     Sheet2.Cells(LastRow, j).value = vTmp(i) 'Dump entry 
     j = j + 1 'Next column 
    End if 
Next i 
Verwandte Themen