Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Auslesen von Werten in ungeöffneten Dateien
#11
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
Antworten Top
#12
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
Antworten Top
#13
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
Antworten Top
#14
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#15
Hallo André,

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

Gruß Uwe
Antworten Top
#16
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:


.csv   Test konvertierte csv-Datei.csv (Größe: 1,01 KB / Downloads: 2)

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
Antworten Top
#17
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#18
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
Antworten Top
#19
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#20
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste