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.

.TextToColumns - Methode, SpecialPase, Einlesen von CSV sheets in Excel (Format!)
#1
Liebe Excel-Vereinsgemeinde ;)

ich habe folgendes Problem: Beim Einfügen meiner Daten aus dem CSV werden die Werte von 3 Spalten in eine gesteckt.
Das passiert, weil Excel das Semikolon nicht als Trennzeichen erkennt. Ich werde die problematischen Zeilen fett hervorheben.
Meiner (laienhaften) Ansicht nach sollte dieser Code richtig sein, ist er aber leider nicht.
Ebenso werden die 5 Kopfzeilen alle in Spalte A des Excelsheets gequetscht, obwohl eigentlich im Quellsheet CSV spalte A und B Daten enthalten.

Ein Beispiel (KOPFZEILE)
Start time;29.03.2018 14:08:22 (Alles in A1 ; B1)
Ein Beispiel (TABELLE)
0;1;0 (Alles in A6, statt in A6, B6 und C6)

'_________________________

'ERFASSEN tatsächlich vorhandener dateien
Dim wbCSV As Workbook
Dim wbAUSWERTUNG As Workbook
Dim ws As Worksheet
Dim a As Integer
Set fso = CreateObject("Scripting.Filesystemobject")
Set wbAUSWERTUNG = ActiveWorkbook
a = wbAUSWERTUNG.Worksheets.Count
Application.DisplayAlerts = False
Application.ScreenUpdating = False
   
'____________________
'Jetzt einlesen.
'--------------------
    For Each f In fso.GetFolder(CSVPFAD).Files
        If LCase(Right(f.Name, 3)) = "csv" Then
            Workbooks.OpenText Filename:=f.Path
            Set wbCSV = ActiveWorkbook
            On Error Resume Next
            Set ws = wbAUSWERTUNG.Worksheets(f.Name)
            If Err <> 0 Then
                Set ws = wbAUSWERTUNG.Worksheets.Add(after:=Sheets(Sheets.Count))
                'MsgBox "Profil wurde erfolgreich geladen: " & f.Name, vbInformation, "Profil geladen" 'funktioniert
                ws.Name = f.Name
                ws.Range("A:ZZ").Clear
            End If
            wbCSV.Worksheets(1).Range("A:ZZ").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True
            wbCSV.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")
            wbCSV.Close False
            wbCSV.Worksheets(1).Copy
            ws.Range("A1").SpecialPaste
            'ws.Name = f.Name
        End If
    Next
    Application.DisplayAlerts = True
    Set fso = Nothing
'_________________________
'Jetzt sortieren

und so weiter und so fort...
Antworten Top
#2
Hallo, du hast den Import noch nicht via Power Query probiert??!?!!!
Gruß Jörg
ich muss mich erst wieder ganz langsam heran robben. Also bitte ich um Nachsicht

"Wer immer tut, was er schon kann, bleibt immer das, was er schon ist." - Henry Ford
[-] Folgende(r) 1 Nutzer sagt Danke an Jockel für diesen Beitrag:
  • Hannes_Ulbricht
Antworten Top
#3
Danke für den Tipp!
erstmal muss ich mich korrigieren: nach den letzten Tests hat das scheinbar gar nichts damit zu tun,
ob ich PASTE oder SPECIALPASTE benutze.

zumindest sollte das doch auch so funktionieren?

aber ich schaue mir dieses Power Query mal an, Danke!
Antworten Top
#4
Hallo, :19:

lädst du uns mal so eine CSV-Datei hier hoch? Dann "schau mer mol" - wie der Kaiser sagen würde. :21:
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • Hannes_Ulbricht
Antworten Top
#5
ich muss vorher einige Daten verfälschen etc. (technische Prozessdaten mit wirtschaftlicher Nutzung)

im Allgemeinen kann ich sagen: wenn ich es wie folgt mache, "kriegt" er das Format perfekt hin;
allerdings werden in der Tabelle (unterhalb der 5 Kopfzeilen mit Beschriftung) nur die Spalten A B und C befüllt,
obwohl es Daten bis T (Spalte 20!) gibt:
________________________________________



wbCSV.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Semicolon:=True, TrailingMinusNumbers:=True
            wbCSV.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")
            wbCSV.Close False
            wbCSV.Worksheets(1).Copy
            ws.Range("A1").Paste
_______________________________________________

Es muss also daran liegen, wie der Wertebereich der Tabelle eingefügt wird in das Excel;
er erkennt so die Semikolons, aber bricht ab Spalte 4 ab; ich muss da an den Bereichen was falsch haben;
aber ich habe Range("A:A").TextToColumns und Range("A:ZZ") ausgiebig getestet, dass muss genau so sein.

was Destination:=ws.Range("A1") und ws.Range("A1").Paste angeht (das eigentliche EINFÜGEN), steht bei ->(link)
Microsoft wörtlich:
Destination: A Range object that specifies where Microsoft Excel will place the results. If the range is larger than a single cell, the top left cell is used.
Insofern bin ich bisher ausgegangen, das "A1" die einzig zulässige Zielangabe ist.
Antworten Top
#6
so, hier ein Beispiel für die Formatierung.
.csv   CSV an example sheet.csv (Größe: 719 Bytes / Downloads: 3)
Zielangabe: ws.Range("A:ZZ").Paste hat das Gleiche zur Folge wie "A1"
Antworten Top
#7
Hallo, :19:

so öffnet er bei mir richtig: :21:

Code:
Workbooks.Open Filename:="C:\Temp\CSV_example.csv", Local:=True

Bei dir auch (Pfad- und Dateiname natürlich anpassen)?
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • Hannes_Ulbricht
Antworten Top
#8
Du bist einfach Spitze! ;)
DANKE!!!
Antworten Top


Gehe zu:


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