Clever-Excel-Forum

Normale Version: Daten aus Textdatei einlesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich würde gerne Daten aus einer Textdatei einlesen, deren Name sich ändern kann (hochlaufende Nummer).

Das ist jedoch nicht alles. Ich benötige NUR eine Ziffernfolge aus der Textdatei, die UNTERSCHIEDLICH LANG sein kann und IMMER 2 Zeichen vor dem ersten Doppelpunkt in der Datei endet. Der Anfang der Ziffernfolge ist dann immer 8 oder 9 Zeichen weiter links (vor der Zahl ist IMMER ein Leerzeichen!).

Wäre jemand so nett, und würde mir eine Funktion für diese Logik basteln?

Gruß Simon
Hi Simon,


Zitat:Wäre jemand so nett, und würde mir eine Funktion für diese Logik basteln?

yep, wenn du einen relevanten Tabellenausschnitt hochlädtst. Es reichen 5-10 Datensätze, gerne anonymisiert, aber vom Aufbau her absolut identisch mit deinem Original. Lies dazu bitte hier nach: http://www.clever-excel-forum.de/Thread-...einstellen
Hallöchen,

da soll eine Textdatei gelesen werden und keine Tabelle Smile

Hier mal ein Ansatz - erst mal für eine Datei zum testen. Siehe Kommentare, schaue dann ins Direktfenster, ob die richtige Zahl ausgelesen wurde. Ich habe hier noch nicht die zwei Zeichen vor dem Doppelpunkt berücksichtigt.

Code:
Sub test()
'Variablendeklarationen
'Objekt
Dim fso As Object, objtext As Object
'Variant
Dim MeineZahl
'Scripting setzen
Set fso = CreateObject("Scripting.FileSystemObject")
'Textobjekt setzen - Dateinamen anpassen!
Set objtext = fso.OpenTextFile("I:\Test\MeinText.txt", 1)
'Datei komplett einlesen
MeineZahl = objtext.ReadAll
'Zahl extrahieren.
'Innere Anweisung: Teil vor erstem Doppelpunkt extrahieren,
'Aeussere Anweisung: ersten Teil zerteilen
MeineZahl = Split(Split(MeineZahl, ":")(0), " ")
'Bestandteil nach letztem Leerzeichen ausgeben
Debug.Print MeineZahl(UBound(MeineZahl))
End Sub
Hallo zusammen,

sorry, dass ich mich jetzt erst melde!

Danke für Eure Antworten. Leider kann ich mit dem Codebeispiel nicht so viel Anfangen. Ich weiß leider nicht wie man Makros erzeugt, geschweige denn sinnvoll anwendet.

Ich habe 2 Dateien angehangen. Ziel ist es, immer die erste Zahl in den Klammern automatisch in Excel einzulesen (in dem Beispiel wäre das die Zahl "4839"). Die Struktur der Textdatei ist IMMER gleich und in diesem Format. Lediglich der NAME der Textdatei kann sich ändern. Es wäre also von Vorteil, wenn man den Namen der Textdatei variabel eingeben könnte, und dann bei "klick auf einen Button" den Wert aus dieser Datei einlesen könnte.
 
könnte mir da einer was schnipseln?

Ich bedanke mich schon mal für eure Hilfe.

Gruß Simon
Hallo Simon,

für die Sache mit den Makros kannst Du Dich da informieren:
http://www.vba-tutorial.de/

Mit Deinem Beispieltext habe ich jetzt ein Problem. Wo ist denn da der Doppelpunkt??
(04.10.2017, 16:32)schauan schrieb: [ -> ]Hallo Simon,

für die Sache mit den Makros kannst Du Dich da informieren:
http://www.vba-tutorial.de/

Mit Deinem Beispieltext habe ich jetzt ein Problem. Wo ist denn da der Doppelpunkt??

sorry, habs aktualisiert!
Schauan? Noch da ? Smile
Hallöchen,

Zitat:Schauan? Noch da ? Smile
... es gibt auch noch Leute, die zur Arbeit gehen Sad

Mit ALT+F11 kommst Du in den Makroeditor. Dort hast Du auf der linken Seite einen Projektexplorer, der so etwa funktioniert wie der von Windows. Du klickst dann auf Deine "Datei" und fügst dort über Menü | Einfügen | Modul selbiges ein und kopierst dort den Code rein. Das Ergebnis sollte dann, wie bei mir, 4839 in G4 sein.

Code:
Sub test()
'Variablendeklarationen
'Objekt
Dim fso As Object, objtext As Object
'Variant
Dim MeineZahl
'Scripting setzen
Set fso = CreateObject("Scripting.FileSystemObject")
'Textobjekt setzen - Dateinamen anpassen!
Set objtext = fso.OpenTextFile("I:\Test\bla2.txt", 1)
'Datei komplett einlesen
MeineZahl = objtext.ReadAll
'Zahl extrahieren.
'Innere Anweisung: Teil vor erstem Doppelpunkt+Klamme :) extrahieren,
'Aeussere Anweisung: ersten Teil nach Klammer "(" zerteilen
MeineZahl = Split(Split(MeineZahl, "):")(0), "(")
'Bestandteil nach letztem Leerzeichen ausgeben
Sheets("Tabelle1").Cells(4, 7) = MeineZahl(UBound(MeineZahl)) * 1
'Debug.Print MeineZahl(UBound(MeineZahl))
End Sub
Hallo Schauan,

daaanke, funktioniert Smile

Eine Frage noch:

Im Anhang habe ich einen Screenshot angehangen. "Excel Ansicht" und die "Makro Ansicht" Wenn das Feld G4 leer ist, muss ich zuerst über ALT+F4 in den Makro Modus und dort auf "ausführen" -> "Sub/UserForm ausführen", damit sich die Zahl aktualisiert (bzw das Programm nochmal abläuft). Gibt es eine Möglichkeit, einen Link oder so zu erstellen, sodass ich in der Excel Ansicht den Wert aktualisieren kann, ohne in den "Makro Modus" zu wechseln?
Hallöchen,

ja, DU hast es im Bild schon richtig beschrieben - mit einem Button. Um da ranzukommen, müsstest Du das Menüband anpassen und die Entwicklertools aktivieren. Dort gibt es dann bei Menü | Einfügen Formularsteuerelemente oder AktiveX...
Den Formularsteuerelementen kannst Du das Makro zuweisen, bei ActiveX kommt ein zusätzliches Makro - Wenn Du im Kontextmenü der Maus auf Code anzeigen gehst - und dort käme z.B. Call Test rein.
Alternativ kannst Du auch irgend ein anderes Objekt nehmen, ein Bild oder ein Rechteck oder ..., und dem ein Makro zuweisen.

Übrigens - auf dem Bild fehlt am Anfang irgendwie ein S bei Sub ...
Seiten: 1 2