Vlookup aus Textdatei

waswiewo

Erfahrenes Mitglied
Hallo Leute!!

Ich stehe vor nem kleinen Problem, und zwar:

Ich habe ein Label (L1), welches bei einem Spiel ein Ergebnis anzeigt. Sobald dieses Ergebnis zwischen 2 und 170 liegt, wird in einem weiteren Label (fsp) ein dazu gehörender Text angezeigt. Dies habe ich bislang mit einem VLookup gemacht, wobei ich die Daten in einer Exeltabelle stehen habe.

Nun möchte ich - mehr aus Interesse - versuchen Diese Daten aus einer *.txt-Datei auszulesen und das Ergebnis auch in einem Label (fsp.Value) ausgeben.

Das ganze möchte ich in einem Modul speichern, weil ich öfter während des Spiels darauf zugreife.

Ich bin momentan hier:

Code:
Public Sub Finish_suchen()

Dim ReadFile As String, rcount As Long
Dim Fso As Object, TextDat As Object

ReadFile = Application.GetOpenFilename("finishes.txt")
If ReadFile = "Falsch" Then Exit Sub
Close #1

Set Fso = CreateObject("Scripting.FileSystemObject")
Set TextDat = Fso.OpenTextFile(ReadFile, 1, False)
Do While TextDat.AtEndOfStream <> True
rcount = rcount + 1
varSuchbegriff = TextDat.ReadLine
If varSuchbegriff = True Then
fsp.Value = Text
End If
Loop
TextDat.Close

End Sub

Obigen Code habe ich im Netz gefunden, versucht zu verstehen, und dann versucht auf mein Problem hin anzupassen. Bislang ohne Erfolg.

varSuchbegriff ist eine Public Variabel und enthält immer eine Zahl von 2 - 170.

Die Textdatei ist so aufgebaut:

170;Text zu 170
169;Text zu 169
.
.
.
2;Text zu 2

In dem Label "fsp" möchte ich nur z.B. "Text zu 170" wiedergeben. Da komm ich gerade überhaupt nicht mehr weiter mit meinem "Können"^^.
 
Damit es nicht zu unübersichtlich wird, schreibe ich eine Antwort auf meine eigene Frage =)

Bin jetzt schon einmal weiter gekommen. Folgender Code zeigt mir schonmal die passende Zeile an und gibt sie auch aus:

Code:
    Dim fso, fsoFile, fsoText
    Dim x As String
    Dim i As Long
    Const fsoForReading = 1
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fsoFile = fso.OpenTextFile("E:\VBA Projekte\Dart Rechner - Test mit txt statt xml\finishes.txt", fsoForReading)
    fsoText = Split(fsoFile.readall, vbCrLf)
    fsoFile.Close

    For i = 0 To UBound(fsoText) - 1 ' ohne letzte Zeile
        If InStr(fsoText(i), varSuchbegriff) Then x = fsoText(i)
    Next i
    
    fsp.Caption = x: finish.Caption = x

Doch wie stelle ich es nun an, dass nur der Wert hinter dem ";" angezeigt wird**** Bei mir wird die komplette Zeile angegeben.

Wär nett wenn ihr nen kleinen Anstoß geben könntet. Habe schon irre viel rumprobiert!

Mfg
 
Soo, hab es nun nach SEHR, SEHR langem rumprobieren auch ohne eure Hilfe geschafft.

Code:
    Dim fso, fsoFile, fsoText
    Dim x As String
    Dim i As Long
    Const fsoForReading = 1
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fsoFile = fso.OpenTextFile("E:\VBA Projekte\Dart Rechner - Test mit txt statt xml\finishes.txt", fsoForReading)
    fsoText = Split(fsoFile.ReadAll, ";")
    fsoFile.Close

    For i = 0 To UBound(fsoText) - 1
        If InStr(fsoText(i), (varSuchbegriff - 1)) Then x = fsoText(i)
    Next i
    
    fsp.Caption = x: finish.Caption = x


Hierbei hab ich

Code:
fsoText = Split(fsoFile.ReadAll, vbCrLf)

durch

Code:
fsoText = Split(fsoFile.ReadAll, ";")

Dadurch wurde aber immer die Zeile vor derjenigen, die ich haben wollte, ausgegeben! Habe dann bei dem Suchwort/ -zahl einfach ein "-1" dazugepackt, nun geht's! Aber kann man dies nicht auch anders lösen?
 

Neue Beiträge

Zurück