Exel: Datei per VBA einlesen

Tach zusammen,
ich möchte mit nem VBA-Makro eine formatierte Textdatei in Exel einlesen, so wie das z.B. beim Dateiimport funktioniert. Es sollen beliebige Spalten und Zeilen (Anzahl zunächst nicht bekannt) in die entsprechenden Exel-Zellen eingelesen werden. Die Textdatei trennt die Spalten durch Semikolon, neue Zeile Textdatei = neue Zeile in Exel.
Geht das, und wenn ja wie?
Bin noch VBA-Anfänger und suche nebenbei noch Infos, Kurse o.ä. zu (Exel) VBA.
Danke schon mal!

Gruß,
Harald

Zeichne einfach über den Makrorecoder in Excel auf, während Du den Import manuell durchführst. Dann schau Dir die Ergebnisse an und ändere ggf. noch von Hand nach. Probleme kann es zwischen dem Punkt (.) und dem Komma (,) geben, da die Aufzeichnung in Deutsch erfolgt, die Wiedergabe nachher aber englisches Format benutzt.

(Woly)

Den Tip hatte ich auch schon bekommen und ausprobiert. M.E. hakt
es aber deshalb, weil gleich ein Array mit einer bestimmten
Größe (Anzahl Spalten) angelegt wird. Es sieht so aus, dass Exel
beim Import gleich erkennt, wie viele Spalten mit den
Einstellungen anzulegen sind.
Ist das wirklich nicht per Makro möglich?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Harald,

Den Tip hatte ich auch schon bekommen und ausprobiert. M.E.
hakt
es aber deshalb, weil gleich ein Array mit einer bestimmten
Größe (Anzahl Spalten) angelegt wird. Es sieht so aus, dass
Exel
beim Import gleich erkennt, wie viele Spalten mit den
Einstellungen anzulegen sind.
Ist das wirklich nicht per Makro möglich?

Natürlich ist das auch per VBA möglich. Beim Aufzeichnen vewendet der Recorder immer Excel-Funktionen mit festen Parametern. Du kannst jedoch VBA-Funktionen nutzen:

open dateiname for input as #1
 while not eof(1)
 input #1, Einlesezeile

 'Jetzt kommt die Stringbehandlung 
 'und das Schreiben in die Zellen
 wend
close #1

Der Codeschnippsel ist nur zum zeigen der Idee da und natürlich so nicht lauffähig.

Ciao

Uwe

Hi Harald,

Natürlich ist das auch per VBA möglich. Beim Aufzeichnen
vewendet der Recorder immer Excel-Funktionen mit festen
Parametern. Du kannst jedoch VBA-Funktionen nutzen:

open dateiname for input as #1
while not eof(1)
input #1, Einlesezeile

'Jetzt kommt die Stringbehandlung
'und das Schreiben in die Zellen
wend
close #1

Der Codeschnippsel ist nur zum zeigen der Idee da und
natürlich so nicht lauffähig.

Ciao

Uwe

Hallo Uwe,
Danke für den Tipp.
Allerdings gibt es zwei Haken:

  1. Bei der Input #1-Zeile muss in der einzulesenden Datei ein Komma als Trennzeichen verwendet worden sein.
  2. Woher soll ich/das Makro wissen, wie viele Variablen die Einlesezeile zur Verfügung stellen muss? Auf Verdacht mal so z.B. 10 Variablen zu füllen versuchen, scheint mir eine unsaubere Lösung zu sein.

Ausserdem: Wie komme ich an die nächsten Zeilen?
(Ich such schon mal in der Zwischenzeit…)

Gruß,
Harald

Hi Harald,

  1. Bei der Input #1-Zeile muss in der einzulesenden Datei ein
    Komma als Trennzeichen verwendet worden sein.

Sorry kleiner Fehler: Es muß natürlich „line input #“ heißen.

  1. Woher soll ich/das Makro wissen, wie viele Variablen die
    Einlesezeile zur Verfügung stellen muss? Auf Verdacht mal so
    z.B. 10 Variablen zu füllen versuchen, scheint mir eine
    unsaubere Lösung zu sein.

Du mußt den String selbst auswerten mit den String-Funktionen mid$, left$ und right$ nach Trennzeichen suchen und den String auseinanderschneiden. Möglicherweise sind auch Typänderungen nötig.

Ausserdem: Wie komme ich an die nächsten Zeilen?
(Ich such schon mal in der Zwischenzeit…)

Bei folgenden Aufrufen der „Line Input“ Funktion, wird automatisch die nächste Zeile eingelesen.

Gruß,
Harald

Ciao

Uwe