Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1064to1068
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Automatisches Einlesen von text-Datein
01.04.2009 11:03:29
text-Datein
Moin Moin
ich möchte gerne Daten aus einer Text-Datei lesen. Dies soll beim öffnen des Excel Formulars automatisch geschehen.
Die Datei hat die folgene Struktur:
[GROUP]
101;102;103;201;202;203;301;302;303;401;402;403;501;502;503;601;602;603; usw...

In den eckigen Klammern steht nur eine Info über den Datensatz. Sie kann direkt übernommen werden.
Das eigentliche Problem sind die Daten. Die ursprüngliche Form war mal ein ARRAY mit 3-Spalten und 500-Zeilen. Leider kann dies beim speichern nicht berücksichtigt werden.
Meine Frage:
Gibt es eine Möglichkeit das einlesen so zu automatisieren, das die ursprüngliche Form wieder hergestellt ist?
Danke schon mal im voraus!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisches Einlesen von text-Datein
01.04.2009 12:11:44
text-Datein
Hallo Thies,
prinzipiell geht es mit folgendem Makro.
Wenn der Dateiname immer identisch ist, dann kannst du der Variablen den vollständigen Dateinamen direkt zuweisen und die If-Pürfung weglassen, d.h. ohne den Dialog anzuzeigen.
In meinem Beispiel werden die Daten in das aktive Tabellenblatt geschrieben.
Du kannst Sie im Userform natürlich auch z.B. einer Listbox oder Kombobox zuweisen.
Gruß
Franz

Sub TextDateiEinlesen()
Dim varTextDatei, FF As Integer
Dim strText As String, arrNumbers, intNumbers As Long
Dim wks As Worksheet, Zeile As Long
varTextDatei = Application.GetOpenFilename(filefilter:="Text(*.txt),*.txt", _
Title:="Bitte Textdatei mit daten auswählen und öffnen")
If varTextDatei  False Then
Set wks = ActiveSheet 'oder auch Worksheets("Tabelle1") 'Zieltabelle
FF = FreeFile()
Zeile = 0 'Zeile nach der die Werte eingetragen werden sollen
Open varTextDatei For Input As #FF
Do Until EOF(FF)
Line Input #FF, strText
Zeile = Zeile + 1
wks.Cells(Zeile, 1) = strText
Line Input #FF, strText
'Textzeile am ";" splitten in ein Array
arrNumbers = Split(strText, ";")
'Arrayinhalte in 3er-Schritten in Zeilen eintragen
For intNumbers = LBound(arrNumbers) To UBound(arrNumbers) Step 3
Zeile = Zeile + 1
wks.Cells(Zeile, 1) = arrNumbers(intNumbers)
wks.Cells(Zeile, 2) = arrNumbers(intNumbers + 1)
wks.Cells(Zeile, 3) = arrNumbers(intNumbers + 2)
Next
Loop
Close #FF
End If
End Sub


Anzeige
AW: Automatisches Einlesen von text-Datein
01.04.2009 13:28:11
text-Datein
Die For...Next kannst Du auch so schreiben:

For intNumbers = LBound(arrNumbers) To UBound(arrNumbers)
wks.Cells(intNumbers \ 3 + 2, intNumbers Mod 3 + 1) = arrNumbers(intNumbers)
Next


Pass allerdings auf, dass die Option Base Anweisung nicht am Anfang des Moduls vorkommt, sonst startet arrNumbers u.U. nicht bei 0 (ist eine Voraussetzung für die Formel). Das "+ 2" gibt die erste Zeile an, in die die Werte geschrieben werden, das "+ 1" die erste Spalte.
Die Anweisung ist im konkreten Fall nicht großartig kürzer als die von Franz, nur wenn es mal nicht um 500x3 sondern um 40x40 geht, dann wird es nach seiner Methode arg aufwendig.
Gruss, Jogy

Anzeige
AW: Automatisches Einlesen von text-Datein
01.04.2009 14:12:46
text-Datein
Hallo Yogi,
bevor ich mich hier in eine Zeilen- und Spalten-Berechnung mit Bruchrechnung und Mod stürze, benutze ich dann doch lieber eine 2. For-Next-Schleife für viele Spalten.

'Arrayinhalte in Schritten in Zeilen eintragen
lngSpalten = 3
For intNumbers = LBound(arrNumbers) To UBound(arrNumbers) Step lngSpalten
Zeile = Zeile + 1
For Spalte = 1 To lngSpalten
wks.Cells(Zeile, Spalte) = arrNumbers(intNumbers + Spalte - 1)
Next
Next


Auch wenn deine Methode eine Eleganz in der Kürze zeigt, so ist meine Variante doch wesentlich einfacher nachzuvollziehen.
Gruß
Franz

Anzeige
AW: Automatisches Einlesen von text-Datein
02.04.2009 11:31:04
text-Datein
Hi Franz,
mit der Nachvollziehbarkeit hast Du sicher recht. Andererseits spart man sich bei meiner Methode die Überprüfung, ob die letzte Spalte voll ist.
Ist aber im wesentlichen eine Frage des persönlichen Geschmacks.
Gruss, Jogy
AW: Automatisches Einlesen von text-Datein
01.04.2009 16:43:38
text-Datein
Viele Dank schon mal!
Das sieht schon sehr gut aus!
Das einzige was noch fehlt ist, dass das Makro automatisch startet...
Bekommt man das auch irgendwie hin?
Gruß Hendrik
AW: Automatisches Einlesen von text-Datein
01.04.2009 17:27:21
text-Datein
Hallo Thies,
wenn es sich um ein Userform innerhalb der Mappe handelt, dann muss das Makro innerhalb der Initialisierungs-Prozedur des UF gestartet werden.

Private Sub UserForm_Initialize()
Call TextDateiEinlesen
End Sub


Sonst beim Öffnen der Exceldatei mit der Workbook_Open-Prozedur (unter "DieseArbeitsmappe")


Private Sub Workbook_Open()
Call TextDateiEinlesen
End Sub


Gruß
Franz

Anzeige
AW: Automatisches Einlesen von text-Datein
07.04.2009 13:27:48
text-Datein
Moin
mit leichter verspätung zurück...
Franz, du erwähntest mal man könne den Ort der zu lesenden Datei fest einstellen.
Sie liegt zwar immer im gleichen Ordner, allerdings nicht zwingend auf dem gleichen Laufwerk.
Wie muss ich die Zeile
varTextDatei = Application.GetOpenFilename(filefilter:="Text(*.txt),*.txt", _
anpassen damit er immer die Datei "Data.txt" öffnet?
AW: Automatisches Einlesen von text-Datein
15.04.2009 14:41:17
text-Datein
Hallo Thies,
zum festen Vorgeben eines Dateinamens gehört eben auch das Laufwerk.
Man kann dann höchsten mit der Dir-Methode prüfen, ob die Datei in einem bestimmten Verzeichnis vorhanden ist.
Nachösterliche Grüße
Franz
Beispiel-Code:

Sub test
varDateiname = ""
If Dir("T:\Verzeichnis\Unterverzeichnis\Data.txt") = "Data.txt" then
varDateiname = "T:\Verzeichnis\Unterverzeichnis\Data.txt"
ElseIf Dir("U:\Verzeichnis\Unterverzeichnis\Data.txt") = "Data.txt" then
varDateiname = "U:\Verzeichnis\Unterverzeichnis\Data.txt"
ElseIf Dir("V:\Verzeichnis\Unterverzeichnis\Data.txt") = "Data.txt" then
varDateiname = "V:\Verzeichnis\Unterverzeichnis\Data.txt"
ElseIf Dir("X:\Verzeichnis\UnterverzeichnisA\Data.txt") = "Data.txt" then
varDateiname = "X:\Verzeichnis\UnterverzeichnisA\Data.txt"
End if
If vardateiname  "" then
'hier dann der Code was mit der Datei varDateiname passieren soll
Else
MsgBox "Satei Data.txt nicht gefunden."
End If


Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige