Clever-Excel-Forum

Normale Version: Auslesen von Werten in ungeöffneten Dateien
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo schauan,

im Nachhinein betrachtet ist mein nächtlicher Vorschlag, den Konvertierungsvorgang in das Makro einzubauen, vielleicht doch nicht so sinnvoll:

Der Ablauf wäre dadurch gestört, dass zweimal nach Fundstellen gefragt werden müsste, zunächst nach dem Ort, wo die Datei im Ursprungsformat steht, und dann nach dem Ort, an dem sie schließlich abgelegt werden soll.

Wäre es besser, man würde zwei Makros daraus machen, eines, das alle Dateien der Kategorie CSV in einem anderen Ordner konvertiert, und ein zweites, welches im Wesentlichen Deinem Vorschlag entspricht, nur dass die auszulesenden Werte jetzt in anderen Zellen stehen ?

Ich hoffe, Dich nicht über Gebühr zu beanspruchen.

Hardbopper
geht doch einwandfrei mit:

Code:
Sub M_snb()
   sn=split(createobject("wscript.shell").exec("cmd /c Dir C:\Downloads\*.csv /b").stdout.readall,vbcrlf)

  redim sp(ubound(sn),1)
  with createobject("scripting.filesystemobject")
    for j=0 to ubound(sn)-1
      st=split(split(.opentextfile("C:\Downloads\" & sn(j)).readall,vbcrlf)(6),";")
      sp(j,0)=st(1)
      sp(j,1)=st(3)
    next
  end with
  sheets(1).cells(1).resize(ubound(sp),2)=sp
End Sub
Hallo,

Andrés Code für P7 und R7:

Option Explicit

Sub CSV_EinLesen()
'Variablendeklarationen
'Variant
Dim varFileName, arrLines
'Zeichenkette
Dim strLines$
'Datei waehlen
varFileName = Application.GetOpenFilename("CSV-Dateien,*.csv,Alle Dateien,*.*", , "Datei öffnen")
'Wenn nichts gewaehlt wurde, dann Makro verlassen
If varFileName = False Then Exit Sub
'alle Zeilen als eine Zeichenkette einlesen
strLines = ReadFile(CStr(varFileName))
'Zeilen trennen
arrLines = Split(strLines, Chr(10))
'Daten uebertragen
'mit der letzten ausgefuellten Zelle in Spalte A
With Cells(Rows.Count, 1).End(xlUp)
'darunter Wert aus 2. Spalte eintragen - Trennzeichen ";"
.Offset(1, 0) = Split(arrLines(6), ";")(15)
'darunter daneben Wert aus 4. Spalte eintragen - Trennzeichen ";"
.Offset(1, 1) = Split(arrLines(6), ";")(17)
'Ende mit der letzten ausgefuellten Zelle in Spalte A
End With
End Sub

Private Function ReadFile(ByVal strFileName As String) As String
'Variablendeklarationen
'Integer, String
Dim iFile%, strAll$
'Freie Dateinummer zuweisen
iFile = FreeFile
'Datei binär öffnen
Open strFileName For Binary As #iFile
'Datei komplett einlesen
strAll = Space(LOF(iFile)): Get #iFile, , strAll
'Datei schliessen
Close #iFile
'Zeichenkette zurueckgeben
ReadFile = strAll
End Function

Code eingefügt mit: Excel Code Jeanie

Sollte das wieder nicht gehen, solltest Du eine solche CSV-Datei posten, damit man es auch richtig testen kann.

Gruß Uwe
Halllöchen,

um auf die Fehler schauen zu können, bräuchte man, wie auch Uwe schrieb, eine csv zur Analyse. Ich könnte mir z.B. vorstellen, dass ein anderes Trennzeichen für die Spalten und / oder Zeilen verwendet wird oder auch keine 7 Zeilen drin sind.
Extra konvertieren und dann übernehmen ist nicht notwendig.
Hallo André,

Du hattest die Zeile 8 abgefragt, die es wohl nicht gab. Wink

Gruß Uwe
Hallo an alle,

nachdem meine Erläuterungen offensichtlich etwas unverständlich werden, habe ich mich entschlossen, aus Datenschutzgründen auf das Nötige gekürzte Dateien hier einzustellen.

Im Verzeichnis Downloads landen Dateien etwa folgenden Aussehens:

[attachment=3012]

Da dem Vernehmen nach Dateien des CSV-Formats nicht unmittelbar ausgewertet werden können, sondern in ein "echtes" XL-Format konvertiert werden müssen, habe ich dies mit folgendem Ergebnis getan:

[attachment=3013]

Wie man sieht, sind die in der CSV-Datei auf  A7:E7 verteilten Einträge durch die Konvertierung in A7 zusammengefasst. Sie werden zwar in diesem Beispiel in  G7:K7 wieder aufgeteilt, die Adresse scheint mir aber insoweit etwas unzuverlässig, weil ich bei einem anderen Versuch diese Einzelwerte in anderen Zellen wiedergefunden habe (warum, kann ich auch nicht erklären), soll heißen: Es wäre sicherer. die ganze Zeile 7 auszulesen, dann könnte ich das Auswerten selbst steuern.

Meine neu formulierte Bitte geht also dahin:

1. (Unterstellt,, die unmittelbare Auswertung von CSV-Dateien ist nicht möglich) ein Makro zu erstellen, welches alle CSV-Dateien im Verzeichnis Downloads en bloc  in XL-Dateien konvertiert.

2. mit einem zweiten Makro aus einzelnen  Dateien die gesamte Zeile 7 auszulesen.

Wenn noch weitere Erläuterungen nötig sind, bitte ich um Nachricht.

Hardbopper
Hallöchen hardbopper,

ja, der Uwe hat recht. Du musst in meinem Code aus den beiden (7) zwei mal (6) machen. Das Ergebnis sieht dann mit Deinen Testdaten bei mir so aus:

Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
4""11.10.2015""""100,00""
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg
Hallo schauan,

ja, es funktioniert. Nur noch eine Kleinigkeit: Die ausgelesenen Werte sind in zwei, manchmal auch in vier Anführungszeichen gesetzt. Kann man die noch los werden ?

Gruß Hardbopper
Hallo,

mal ungetestet

Code:
With Cells(Rows.Count, 1).End(xlUp)
'darunter Wert aus 2. Spalte eintragen - Trennzeichen ";"
.Offset(1, 0) = Replace(Split(arrLines(6), ";")(15), Chr(34), "")
'darunter daneben Wert aus 4. Spalte eintragen - Trennzeichen ";"
.Offset(1, 1) = Replace(Split(arrLines(6), ";")(17), Chr(34), "")
'Ende mit der letzten ausgefuellten Zelle in Spalte A
End With
Ich dachte dabei an eine Möglichkeit im Makro.

Andernfalls werde ich die Formel =WECHSELN(A1;"""";"") einsetzen.

Jetzt schon einmal herzlichen Dank an alle, die an der Lösung beteiligt waren.

Einen schönen Sonntag noch.

Hardbopper
Seiten: 1 2 3