Naja, nach 31 Beiträgen stellt sich heraus, dass es sich um eine CSV Datei handelt. Diese CSV muss natürlich mit PQ importiert + verarbeitet werden oder per VBA als Textdatei via ADODB.Stream unter Beachtung UTF-8 oder UTF-16 Format gelesen und ins Array geschrieben werden.
Zitat:Naja, nach 31 Beiträgen stellt sich heraus, dass es sich um eine CSV Datei handelt.
Dann spricht ja noch mehr dafür, es vollständig mit PQ zu machen, wobei unter diesen Voraussetzungen meine Lösung wohl auch etwas angepasst werden muss.
14.04.2025, 18:15 (Dieser Beitrag wurde zuletzt bearbeitet: 14.04.2025, 18:15 von Olerostock.)
Hi Uwe,
sorry dass ich nicht auf die Datei-Endung geachtet habe. Ich habe jetzt einmal beide Beispieldateien hochgeladen, da ich den Fehler einfach nicht weg bekommen. Wie kann ich denn die CSV Datei über VBA einbinden?
Ich habe die eine Datei auch als xlsx gespeichert, aber das Array will und will sich nicht füllen.
ich habe grad gesehen, dass ich vergessen hatte die Textwerte in A und B in echtes Datum umzuwandeln, damit der Vergleich auch sauber funktioniert. Tausche diese Prozedur aus:
Code:
Sub CSVLadenInArray() Dim ZeileAusImport$, row_number&, i&, iSp& Dim objStream As Object Dim ZeilenNummer DateiName = Tabelle10.Range("A52") & Tabelle10.Range("A51") Set objStream = CreateObject("ADODB.Stream") With objStream .Charset = "utf-8" .Open If DateiName = "" Then DateiOeffnen If Dir(DateiName) <> "" Then .LoadFromFile (DateiName) Else DateiOeffnen If DateiName = "Falsch" Then Exit Sub .LoadFromFile (DateiName) End If .LineSeparator = 10 End With row_number = 1
Do Until objStream.EOS ZeileAusImport = objStream.ReadText(-2) ZeilenNummer = Split(ZeileAusImport, ";") If iSp < UBound(ZeilenNummer) Then iSp = UBound(ZeilenNummer) row_number = row_number + 1 Loop Set objStream = Nothing ReDim arr(1 To row_number - 1, 1 To iSp + 1)
Set objStream = CreateObject("ADODB.Stream") With objStream .Charset = "utf-8" .Open If DateiName = "" Then DateiOeffnen If Dir(DateiName) <> "" Then .LoadFromFile (DateiName) Else DateiOeffnen If DateiName = "Falsch" Then Exit Sub .LoadFromFile (DateiName) End If .LineSeparator = 10 End With row_number = 1
Do Until objStream.EOS ZeileAusImport = objStream.ReadText(-2) ZeilenNummer = Split(ZeileAusImport, ";") If row_number = 1 Then ' 1. Zeile auslassen Else For i = 0 To UBound(ZeilenNummer) If i > 1 Then arr(row_number - 1, i + 1) = Replace(ZeilenNummer(i), """", "", 1, 10) ' mit 1. Zeile: arr(row_number, i + 1) Else arr(row_number - 1, i + 1) = CDate(Replace(ZeilenNummer(i), """", "", 1, 10)) End If Next i End If row_number = row_number + 1 Loop Set objStream = Nothing DatenAuslesen End Sub
ganz, ganz recht herzlichen Dank. Durch diese Änderung hat er auch nicht mehr die Mitteilung gebracht, dass für das Datum aktuell keine Daten vorliegen.
Danke das du dir für mich die ganze Zeit genommen hast und ja, ich werde mich definitiv um PowerQuery kümmern, da es wirklich die Arbeit erleichtert.