vba zum importieren von textdateein in excel

eta232

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich versuche mehrere Textdateien (benannt so: test.001 ..test.002...test.01P...usw) in Excel zu importieren. im Ersten Schritt sollen diese im Optimalfall als separates sheet mit Dateinamen angelegt werden.
Mein Code dazu sieht wie folgt aus: diesen habe ich als Button "importieren" im sheet Tabelle 1 hinterlegt, funktioniert soweit nur der sheetname lautet nur "test(1)..test(2)..usw
Code:
Sub Datei_Importieren()
  Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
  Const cstrDelim As String = ";" 'Trennzeichen
  With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Title = "Datei wählen"
    .InitialFileName = "hier steht der pfad*.*"  'Pfad anpassen
    .Filters.Add "CSV-Dateien", "*.csv", 1
    If .Show = -1 Then
      strFileName = .SelectedItems(1)
    End If
  End With
  If strFileName <> "" Then
    Workbooks.OpenText Filename:=strFileName, _
    DataType:=xlDelimited, Semicolon:=True
    ActiveSheet.Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    
  End If
  
End Sub

Im Zweiten Schritt soll in Tabelle 1 werte aus den importierten Dateien aufgelistet werden, diese sind aber mies formatiert, d.h. ich muss teile der zellen abschneiden.
Wert 1 befindet sich in Zeile A19 und lautet: Wcomp=21.6 ich brauche nur den wert 21,6, dieser soll in D9 in Tabelle 1 eingefügt werden (werte der nächsten Dateien sollen darunter eingefügt werden)
Wert 2 befindet sich in Zeile A201 und lautet: YYYY/MM/DD:2016/7/19 ich brauche nur das Datum und es soll in B9 Tabelle 1 eingefügt werden
Wert 3 in Zelle A202 und lautet: HH:MM:10:48 hier nur die Uhrzeit und sie soll in C9 stehen
Wert 4 in Zelle A211 und laute: MFRx:8.26147 hier wird der Wert nach dem : gebraucht und dieser soll in Zelle E9 der Tabelle 1 stehen
Wert 5 wäre der Dateiname des Sheets (bzw der Textdatei) und solle in A9 Tabelle1 stehen

Die Formeln für werte 1 - 4 dazu habe ich bereits, auch einen Button für die "Auswertung" aber ich bekomme das nicht hin das er alle vorhandenen Sheets abarbeitet
Code sieht wie folgt aus:
Code:
Sub Auswertung()
'
' Auswertung Makro
'
'
    ActiveCell.FormulaR1C1 = ""
    Range("B9").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(TEST!R[192]C[-1],LEN(TEST!R[192]C[-1])-11)"
    Range("C9").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(TEST!R[193]C[-2],LEN(TEST!R[193]C[-2])-6)"
    Range("D9").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(TEST!R[10]C[-3],LEN(TEST!R[10]C[-3])-6)"
    Range("E9").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(TEST!R[202]C[-4],LEN(TEST!R[202]C[-4])-5)"
    Range("E10").Select
End Sub
Ich bin echt absoluter Anfänger und fast der Meinung so lange wie ich das bereits versuche könnte ich das auch händisch machen, aber es geht ums Prinzip und das ich das ggf lerne und verstehe. und für weitere Dateien anwenden kann.
Hoffe mir kann jmd helfen?
 
Also ich würde das nicht so lösen, dass du jeder Zelle die jeweils notwendige Formel spendierst ...
Mein Ansatz wäre : Im Laden-Script die eingelesenen String mit den jeweiligen VBA-Befehlen direkt so aufzubereiten, dass du sie direkt der Zelle zuweisen kannst. Deswegen kann dann natürlich trotzdem die eine Zelle als Zahl mit Nachkommastellen und die nächste Zelle als Datum formatiert sein ...

Gruß
Larry
 
z.B. :
Code:
[B9] = right (Zeilenstring , 11)
oder
[B9] = right (Zeilenstring , len(Zeilestring)-11)

darüber hinaus gibt es dann auch noch LEFT und MID ...
 
man komm ich mir blöd vor ;)
hab keinen Plan wie ich das umsetzen kann :(
Dachte immerhin habe ich schon die Formel und müsste nur noch was einfügen um diese auch auf die restlichen Tabellenblätter anzuwenden

Ich sehe gerade das mein erster Code auch nur bedingt funktioniert: er fügt leider immer nur eine Datei ein, auch wenn ich mehrere auswähle. Wie änder ich denn das?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Na ... dann würde ich erstmal sagen : Eins nach dem Anderen ...
Unter Berücksichtigung deines Gesamtziels würde ich jetzt eine Methode (Sub) erstellen, die die Datei importiert, deren Namen du an sie übergeben hast. Nun könnte die dann auch die Daten in den Bereich schreiben, den du ebenfalls übergibst (ich nehme hier mal an : jede Datei in eine Zeile).
Da wir das Ganze jetzt anscheinend schrittweise aufbauen müssen erstmal die folgende Frage : wie weit kommst du denn mit VBA ? Kannst du mit dem Beitrag#4 von mir etwas anfangen ?

Dann vielleicht noch etwas zu mir : ich helfe gerne ... mache aber nicht die ganze Arbeit allein - es soll am Ende schon dein Werk sein ...

Gruß
Larry
 
Klingt super!
Ziel war (ist) jede importierte Datei (am besten gleich alle Dateien auf einmal) auch als separates sheet zu erhalten, woraus dann die genannten Werte in die Tabelle1 geschrieben werden, jede Datei in eine Zeile.

ja meine VBA Kenntnisse beruhen auf weniger als kaum Kenntnisse, ich beschäftige mich ab und an damit und versuche mir das anzueignen, aber ehrlich gesagt habe ich kein plan. #4 sagt mir etwas, aber wie ich den Term "zeilenstring" interpretieren muss und was dieser macht/aussagt usw keine Idee... :(
den ersten code habe ich auch dank Google gefunden, dann noch mein pfad anzupassen habe ich locker geschafft ;)
 
Zeilenstring ist ein Platzhalter meinerseits gewesen.

Du solltest nun folgendes machen und als Code aufarbeiten :
- lies alle deine Datenzeilen aus einer deiner Dateien in VBA-Variablen - praktisch wäre hier ein ausreichend dimensioniertes Array
- nun versuche mittels der VBA-Anweisungen aus den Strings, die du aus deiner Quelldatei bekommst, sinnvolle Teilvariablen zu machen. Das kann man natürlich Stück für Stück machen, wenn du beschreibst, was dabei herauskommen soll.
- der VBA-Code in Excel ist debugbar - du kann ihn also ganz oder teilweise ausführen lassen und Breakpoints in deinem Code plazieren - mach dich mal damit vertraut - das wirst du immer wieder brauchen, da du so sehen kannst, was die jeweiligen Anweisungen bewirken und was dann in den Variablen drinstand / drinsteht

Wo stehen wir jetzt aktuell ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
puuuh bin überfordert, kein plan sorry :(
hab keine Idee welche Kommandos ich hier wie wo nehmen kann/soll usw.. bin halt absoluter einsteiger :(

EDIT: habe mir ein Buch gekauft ;) Einstieg in VBA mit Excel.... das wälze ich jetzt und melde mich zurück, aber das ist der einzig sinvolle Weg hier vorran zu kommen ohne das andere Leute die Arbeit für mich machen.
 
Zuletzt bearbeitet:
so jetzt werde ich bekloppt ;)
folgender code:
Code:
Sub Daten_auslesen()

ThisWorkbook.Worksheets("Test_06P").Activate    'Auswahl des importierten Textdokuments
    Range("a19").Copy Destination:=ThisWorkbook.Worksheets("Tabelle1").Range("d9")  'Kopie der Zelle A19 und einfügen in Zelle D9 der Tabelle1
    Range("A20").Copy Destination:=ThisWorkbook.Worksheets("Tabelle1").Range("b9")
    Range("A201").Copy Destination:=ThisWorkbook.Worksheets("Tabelle1").Range("c9")
    Range("A210").Copy Destination:=ThisWorkbook.Worksheets("Tabelle1").Range("e9")
ThisWorkbook.Worksheets("Tabelle1").Activate    'Aktivierung des Blattes mit eingefügten werten
End Sub
Resultat: Zellen B9 - E9 der Tabelle1 bleiben leer, warum?
 
Warum schreibst du nicht :
Code:
ThisWorkbook.Worksheets("Tabelle1").Range("d9") = Range("a19")
oder noch besser :
Code:
ThisWorkbook.Worksheets("Tabelle1").Range("d9") =ThisWorkbook.Worksheets("Test_06P").Range("a19")
es müßte aber auch gehen :
Code:
Sheets("Tabelle1").Range("d9") =Sheets("Test_06P").Range("a19")

Gruß
Larry
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, das funktioniert.
bin jetzt an dem Punkt wo ich die komischen Formate habe die ich wie folgt lösen wollte, vlt zu simpel gedacht?: B9 sieht wie folgt aus: YYYY/MM/DD:2017/3/21
Code:
Sub formate()
ThisWorkbook.Worksheets("Tabelle1").Range("b9") = Right("b9", Len("b9") - 11)
End Sub
bekomme aber einen fehler: Laufzeitfehler 5 ungültiger prozeduraufruf oder ungültiges Argument

ok, habs gepackt:
Code:
Sub Daten_auslesen_neu()
ThisWorkbook.Worksheets("Tabelle1").Range("d9") = ThisWorkbook.Worksheets("Test_06P").Range("a19")
    [d9] = Right(Range("D9"), 4)
ThisWorkbook.Worksheets("Tabelle1").Range("b9") = ThisWorkbook.Worksheets("Test_06P").Range("a200")
    [b9] = Right(Range("b9"), 9)
ThisWorkbook.Worksheets("Tabelle1").Range("c9") = ThisWorkbook.Worksheets("Test_06P").Range("a201")
    [c9] = Right(Range("c9"), 4)
ThisWorkbook.Worksheets("Tabelle1").Range("e9") = ThisWorkbook.Worksheets("Test_06P").Range("a210")
    [e9] = Right(Range("e9"), 7)
   
End Sub

Dann hätte ich das zumindest für ein eingefügtes blatt.
Jetzt spinnt aber mein erster code zum einfügen der Blätter, er öffnet mir die Datei als separate Datei und fügt es nicht in die aktive arbeitsmappe ein....
folgenden code nutze ich:
Code:
Sub Datei_Importieren()
  Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
  Const cstrDelim As String = ";" 'Trennzeichen
  With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .Title = "Datei wählen"
    .InitialFileName = "hier kommt pfad rein*.*"  'Pfad anpassen
    .Filters.Add "CSV-Dateien", "*.*"
    If .Show = -1 Then
      strFileName = .SelectedItems(1)
    End If
    
  End With
  If strFileName <> "" Then
    Workbooks.OpenText Filename:=strFileName, DataType:=xlDelimited, Semicolon:=True
    ActiveSheet.Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
   
  End If
  
End Sub
 
Zuletzt bearbeitet:
Zurück
Oben