Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1864to1868
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA txt/csv in Excel speichern

VBA txt/csv in Excel speichern
26.01.2022 19:25:58
Flompe
Hallo zusammen,
ich habe ein großes Problem beim Öffnen einer TXT bzw. CSV Datei in Excel. Meine Textdatei enthält Fallnummern die u.a. mit führenden 0en beginnen. Ich habe schon gegoogelt und einiges ausprobiert, aber nicht scheint zu helfen! Die Datei ist beliebig als txt oder csv und Semikolosepariert:
  • Fach; Fallnummer; DatVon; DatBis
    AU;05000000033808665;20160101;20180914
    AU;05000000033808244;20170101;20171015

  • Speicher ich die Datei in Excel wird mir in Spalte2 (Fallnummer) "5E+15" Angezeigt, klick ich auf die Zelle in schau im Formelfeld, enthält die Zelle keine führende 0 mehr und die letzte Ziffer wird anstatt 5 bzw. 4 zu einer 0 ... es gehen hier also Daten verloren!?!?! Die von und bis Daten bleiben aber erhalten.
    Ich habe es bisher mit den Methoden Workbooks.Open und Workbooks.OpenText versucht, komme aber nicht zu dem gewünschten ergebnis die komplette Zahl als Text angezeigt zu bekommen... ich hoffe ihr könnt mir Helfen :/
    Mein derweiliger Code schaut so aus:

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    quell_datei = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
    ziel_datei = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(1))
    Set oExcel = CreateObject("Excel.Application")
    oExcel.Workbooks.Open quell_datei, False, False, True, , , False, , , False, False, , , True, xlNormalLoad
    oExcel.Worksheets(1).Columns(2).NumberFormat = "@"
    oExcel.ActiveWorkbook.SaveAs ziel_datei, 51, , , , False
    oExcel.ActiveWorkbook.Close False
    oExcel.Quit

    würde ich es manuell machen, würde ich ein txt-file draus machen und über den import-assistenten die Spalte als txt-Spalte definieren... aber selbst mit der Methode OpenText funktioniert es nicht wie gewünscht, selbst wenn ich die Fallnummer in " klammer funktioniert es nicht, ich hatte hier auch schon von einem einfachen Hochkomma gelesen, aber das wird mir dann auch in der Exceldatei angezeigt... ich bin Ratlos :/
    vielen Dank Vorab für die Hilfe
    Flo

    4
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA txt/csv in Excel speichern
    26.01.2022 21:36:56
    volti
    Hallo Flompe,
    vielleicht hilft Dir nachfolgender Beispiel-Code bei Deinem Problem.
    Code:

    [Cc]

    Sub CSV_Einlesen() Dim sPfad As String, sArr() As String, sArr2() As String Dim i As Long, iFF As Integer sPfad = "C:&bsol;Users&bsol;voltm&bsol;Desktop&bsol;MyTools&bsol;Daten&bsol;Testdaten.csv" Const sSep As String = ";" ' Trenner angeben ' Datei öffnen und einlesen If Dir$(sPfad) <> "" Then ' Ist Datei vorhanden? Open sPfad For Input As #1 ' Datei öffnen sArr = Split(Input(LOF(1), #1), vbCrLf) ' Daten in Array einlesen Close #1 ' Datei schließen On Error Resume Next With ActiveSheet.Range("A1") ' Einfügestelle For i = 0 To UBound(sArr) sArr2 = Split(sArr(i), sSep) ' Zeile ausgeben .Offset(i, 0).Resize(1, UBound(sArr2) + 1) = sArr2 Next i End With End If End Sub

    _________________________
    viele Grüße aus Freigericht 😊
    Karl-Heinz

    Anzeige
    AW: VBS txt/csv in Excel speichern
    27.01.2022 09:54:31
    Flompe
    Oh Shit und danke für die Antwort, aber das wird mir nicht weiter helfen, ich würde gerne aus dem VBA ein VBS machen :/
    ich verwende gerade VBS und bekomme es damit nicht hin... weil ich immer noch ratlos bin werde ich wohl mal eine Lösung in c# versuchen ... ich denke damit werde ich Excel in die knie zwingen können ... wenn es dafür nicht schon klassen gibt, würde ich es so machen wie du geschreiben hast... letzlich wundere ich mich aber, das Excel da so intolerant ist und alles was wie eine Zahl aussieht auch Zwingen in sein Format pressen will... selbst wenn ich unterstrichen vor die Fallnummer setzte und über das Skript entferne wird der String in eine Wissenschaftliche Zahl umgewandelt... :(
    Anzeige
    AW: VBS txt/csv in Excel speichern
    27.01.2022 11:03:21
    JoWE
    so vllt.:
    
    varName = Application.GetOpenFilename("CSV-Dateien (*.csv),*.csv,Alle Dateien (*.*),*.*")
    If varName = False Then Exit Sub
    Workbooks.OpenText varName
    Range("A:A").TextToColumns Destination:=Range("A1"), Semicolon:=True, FieldInfo _
    :=Array(Array(1, 2), Array(2, 2), Array(3, 4), Array(4, 4)), TrailingMinusNumbers:=True
    Range("A1").Select
    

    AW: VBS txt/csv in Excel speichern
    27.01.2022 12:47:29
    Flompe
    Vorab vielen Dank!
    Das einlesen Spaltenorientiert klappt über die Methode
    
    oExcel.Workbooks.Open quell_datei, False, False, True, , , False, , , False, False, , , True, xlNormalLoad
    
    die Fallnummer (Spalte2), habe ich jetzt mit einem unterstrich versehen, "_" + 17-stellige Nummer dadurch interpretiert Excel diese nicht mehr als Zahl und mir gehen keine Daten verloren! Um den Unterstrich wieder weg zu bekommen habe ich in Spalte10 eine Replace-Funktion gesetzt die diesen Entfernt und im Anschluss Spalte 2 ausgeblendet, das Funktioniert und Excel belässt die Werte in Spalte10 auch als Zahl; somit wird mir jetzt hier die echte Fallnummer angezeigt... hier meine Lösung:
    
    ' Quell- & Zielpfad bestimmen
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    quell_datei = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
    ziel_datei = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
    ' Datei in Excel öffnen
    Dim oExcel
    Set oExcel = CreateObject("Excel.Application")
    oExcel.Workbooks.Open quell_datei, False, False, True, , , False, , , False, False, , , True, xlNormalLoad
    oExcel.Worksheets(1).Columns(2).NumberFormat = "@"
    oExcel.Worksheets(1).Range("J1:J1").FormulaR1C1 = "=RC[-8]"
    oExcel.Worksheets(1).Range("J2:J500").FormulaR1C1 = "=REPLACE(RC[-8],1,1,"""")"
    oExcel.Worksheets(1).Columns(2).Hidden = True
    oExcel.ActiveWorkbook.SaveAs ziel_datei, 51, , , , False, , , , , , , True
    oExcel.ActiveWorkbook.Close False
    oExcel.Quit
    
    aufgerufen wird die scriptdatei so:
    
    CsvToExcel IN.csv OUT.xlsx
    
    ...ich fürchte mit vbs ist das nicht anders machbar; wenn die Lösung so nicht akzeptiert wird werde ich mich wieder in c# einlesen...
    Danke nochmal ;o)
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige