ich hoffe jemand kann mir helfen bzgl. eines VBA script. Das Script sollte aus MAIN-Tabelle die Text-Datei, C:\TEMP\wlist.txt, die ersten Spalte durchsuchen.
Ist die Suche erfolgreich, trägt aus der Spalte 2 der Text-Datei den Wert in der Spalte I ein.
zB findet in der ersten Spalte der TXT-Datei “hostname”, trägt in Spalte I den Wert “display host name“ ein. Wiederholgen sind in der Spalte H wohl möglich.
Die TXT Datei hat nur 2 Spalte und etwa 500 Zeilen.
wozu VBA? Das kann doch Powerquery viel einfacher. Falls es doch VBA sein soll: Welche vorarbeit hast du schon geleistet? An welchem konkreten Problem hakt es noch? wie sieht dein jetztiger Code aus, welche Fehler wirft er aus? Welche Vorkenntnisse hast du? Oder handelt es sich um einen Programmierauftrag?
Hallo Zusammen Die Action ist schwieriger als ich dachte. Denn von SAP gelieferte Excel Datei hat weitgehend komplizierte Struktur. Dennoch, hier eine Lösung : 1:die Spalten in der Text-Datei müssen via TAB getrennt sein und zwar nur eine TAB-Taste. 2:die erste Spalte in der Text-Datei ist Case sensitive. Ihr könnte so anpassen, wie Ihr wollt.
Sub test() Dim ws As Worksheet Dim txtFile As String Dim txtLine As String Dim txtArray() As String Dim cell As Range Dim fso As Object Dim ts As Object Dim dict As Object Dim searchTerms As Variant Dim term As Variant
Set ws = ThisWorkbook.Sheets("sapi") txtFile = "C:\temp\wlist.txt" Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.OpenTextFile(txtFile, 1) Set dict = CreateObject("Scripting.Dictionary") Do While Not ts.AtEndOfStream txtLine = ts.ReadLine txtArray = Split(txtLine, vbTab) If UBound(txtArray) >= 1 Then dict(CStr(txtArray(0))) = txtArray(1) End If Loop ts.Close
For Each cell In ws.Range("H14:H" & ws.Cells(ws.Rows.Count, "H").End(xlUp).Row) For Each term In searchTerms If InStr(1, cell.Value, term, vbTextCompare) > 0 Then If dict.exists(CStr(cell.Value)) Then cell.Offset(0, 1).Value = dict(CStr(cell.Value)) Else cell.Offset(0, 1).Value = "Not Found" End If Exit For End If Next term Next cell
Set dict = Nothing Set ts = Nothing Set fso = Nothing End Sub