ich möchte Zeichenfolgen (z.B. import e.ws, import abcdef.ws ...) in einer Textdatei suchen um sie später als string-Variable zu verwenden. Diese fangen immer mit "import" an und hören mit ".ws" auf.
ich habe schon einiges versucht, aber bin noch nicht auf das richtige gekommen:
Weg 1:
Workbooks.OpenText Filename:= _
"C:\test.txt", Origin:=1254, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Cells.Find(What:="import *.ws", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Cells.FindNext(After:=ActiveCell).Activate
MsgBox Cells.FindNext(After:=ActiveCell).Value
...
dieser Weg benötigt ein worksheet, was relativ ungünstig ist. außerdem kommen als Ergebnis ganze Zellen raus, was ich ja auch nicht will, da diese noch weitere Zeichen enthalten könnten
weg 2:
With Application.FileSearch
.NewSearch
.LookIn = "C:\"
.SearchSubFolders = True
.Filename = "test.txt"
.TextOrProperty = "import *.ws"
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
End With
MsgBox Application.FileSearch.Execute
dieser weg zeigt mir an, dass ein string enthalten ist, aber nicht wie dieser genau ausschaut.
weg 3:
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\test.txt")
Set ts = f.OpenAsTextStream(1, -2)
s = ts.Read(f.Size)
d = Split(s, Chr(10))
ts.Close
For i = LBound(d) To UBound(d)
If InStr(1, d(i), "import *.ws") Then MsgBox InStr(1, d(i), "ws")
Next i
dieser weg klappt nicht, da Instr den platzhalter * nicht annimmt.
kennt jemand eine einfache praktikable lösung?