Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
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

CSV Datei via VBA in Excel einlesen

CSV Datei via VBA in Excel einlesen
08.07.2023 18:37:10
Jürgen

Hallo zusammen,

ich habe ein VBA-Sheet, mit der ich eine CSV Datei einlesen möchte, die dann als "Zielname".xlsx abgespeichert werden soll.
Automatisch öffnen, Speichern etc. Läuft bereits.

Soweit funktioniert das ganze auch ganz gut, nur möchte ich die CSV als "TEXT" einlesen und speichern, Excel formatiert mir aber die Zellen automatisch als Zahl und Datum, wie kann ich das umgehen? Bzw. abschalten?

Gruss
Jürgen

hier mein Code und die Beispielmappe

https://www.herber.de/bbs/user/159860.xlsm



Private Sub CSVBearb()

  Dim strTxt, Laufwerk, Pfad, zPfad, Dateiname, count, Spalt, unt As Integer
  Dim myarr, lngL As Long
  Dim strDatei, wks As Worksheet
  Laufwerk = ActiveWorkbook.Worksheets("Steuerung").Range("V2").Value
  Pfad = ActiveWorkbook.Worksheets("Steuerung").Range("V3").Value

  strPath = Pfad
  strExt = "*.csv"
  Dim strFile As String
  If strPath = "" Then
  Exit Sub
  Else
  strFile = Dir(strPath & strExt)
  zPfad = ActiveWorkbook.Worksheets("Steuerung").Range("V4").Value
  Dateiname = ActiveWorkbook.Worksheets("Steuerung").Range("V5").Value & Format(Date, "yyyymmdd") & "_"
  count = ActiveWorkbook.Worksheets("Steuerung").Range("V6").Value
  ActiveWorkbook.Worksheets("Steuerung").Range("V6").Value = count + 1
  
  Workbooks.OpenText Filename:=strPath & strFile, DataType:=xlDelimited, Semicolon:=True, Local:=True
      
  If ActiveWorkbook.Sheets(1).Range("A1").Value = "STOP" Then
    MsgBox "Prozess gestoppt"
  Else
      
  Dim AktSh As Variant
  AktSh = ActiveSheet.Name
  Spalt = ActiveWorkbook.Sheets(1).Cells(1, Columns.count).End(xlToLeft).Column
  ActiveWorkbook.Sheets(1).Activate
  ActiveSheet.Columns(Spalt).Delete
  unt = ActiveWorkbook.Sheets(1).Cells(Rows.count, 1).End(xlUp).Row
  ActiveWorkbook.Sheets(1).Range("A1:AZ" & unt).Select
  Dim Zelle As Range
  For Each Zelle In Selection
  Zelle = Zelle.Text
  Next Zelle
    
  ActiveWorkbook.Sheets(1).Range("G:I").Replace What:=".", Replacement:="-", LookAt:=xlPart
  
  ActiveWorkbook.SaveAs Filename:=zPfad & Dateiname & Format(count, "00000"), FileFormat:=xlOpenXMLWorkbook
  ActiveWorkbook.Close

  End If
  
  Dim Quelle As String
  Dim Ziel As String
  Quelle = strPath & strFile
  Ziel = strPath & "Save\" & strFile
  Name Quelle As Ziel
  
  End If
  
' hier Automatisch Schliessen und Speichern
 ' For Each w In Application.Workbooks
 ' w.Save
 ' Next w
 ' Application.Quit

End Sub


3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Datei via VBA in Excel einlesen
08.07.2023 19:41:06
Zwenn
Hallo Jürgen,

diese Frage wurde schon so oft beantwortet, dass ich zunächst auf eine Erklärung von mir selbst verlinke, was eine CSV ist und warum es keine gute Idee ist, sie einfach in Excel zu öffnen. Du musst sie importieren. Neben meiner Erklärung findest Du auch Lösungsansätze für Dein Problem in dem Thread:
https://www.ms-office-forum.net/forum/showthread.php?p=2077054#post2077054

Viele Grüße,

Zwenn


AW: CSV Datei via VBA in Excel einlesen
08.07.2023 19:54:50
Piet
Hallo

ich habe gerade beim Kollegen gelesen das man CSV nicht mit Excel öffnen, sondern importieren soll. Dazu fand ich diesen Code im Archiv:

mfg Piet


  • Sub test3()
    Application.Workbooks.OpenText Filename:="Dateipfad\Dateiname", DataType:=xlDelimited,  Semicolon:=True, Local:=True
    End Sub



  • Anzeige
    AW: CSV Datei via VBA in Excel einlesen
    08.07.2023 19:43:47
    Piet
    Hallo

    ich habe den Code mal etwas geändert. OHNE Garantie das er so funktioniert. Bitte gründlich testen.

    Mein Tipp: ich setze alle Dim an den Anfang, nicht mitten im Code, das verwirrt nur unnötig.
    Nach Meldungen wie MsgBox "Prozess gestoppt" setze ich immer Exit Sub (mit Doppelpunkt) Beende den Code!
    Ich brauche mir dann keine Gedanken über Else und End If im nachfolgenden Code zu machen!
    Die Befehle hinter If xxx Then und Else rücke ich immer mit drei Space ein. Das erleichtert mir die Optik was zum Codeteil gehört.

    mfg Piet

  • Private Sub CSVBearb()
      Dim strFile As String, strDatei, wks As Worksheet, myarr, lngL As Long
      Dim strTxt, Laufwerk, Pfad, zPfad, Dateiname, count, Spalt, unt As Integer
      Dim AktSh As Variant, Zelle As Range, Quelle As String, Ziel As String
      
      Laufwerk = ActiveWorkbook.Worksheets("Steuerung").Range("V2").Value
      Pfad = ActiveWorkbook.Worksheets("Steuerung").Range("V3").Value
    
      strPath = Pfad
      strExt = "*.csv"
      If strPath = "" Then Exit Sub
      
      strFile = Dir(strPath & strExt)
      zPfad = ActiveWorkbook.Worksheets("Steuerung").Range("V4").Value
      Dateiname = ActiveWorkbook.Worksheets("Steuerung").Range("V5").Value & Format(Date, "yyyymmdd") & "_"
      count = ActiveWorkbook.Worksheets("Steuerung").Range("V6").Value
      ActiveWorkbook.Worksheets("Steuerung").Range("V6").Value = count + 1
      
      Workbooks.OpenText Filename:=strPath & strFile, DataType:=xlDelimited, Semicolon:=True, Local:=True
          
      If ActiveWorkbook.Sheets(1).Range("A1").Value = "STOP" Then _
         MsgBox "Prozess gestoppt": Exit Sub
          
      AktSh = ActiveSheet.Name
      Spalt = ActiveWorkbook.Sheets(1).Cells(1, Columns.count).End(xlToLeft).Column
      ActiveWorkbook.Sheets(1).Columns(Spalt).Delete
      
      'Alle Daten in Wert umwandeln
      ActiveWorkbook.Sheets(1).UsedRange.Value = _
      ActiveWorkbook.Sheets(1).UsedRange.Value
        
      ActiveWorkbook.Sheets(1).Range("G:I").Replace What:=".", Replacement:="-", LookAt:=xlPart
      
      ActiveWorkbook.SaveAs Filename:=zPfad & Dateiname & Format(count, "00000"), FileFormat:=xlOpenXMLWorkbook
      ActiveWorkbook.Close
      
      Quelle = strPath & strFile
      Ziel = strPath & "Save\" & strFile
      Name Quelle As Ziel
      
    ' hier Automatisch Schliessen und Speichern
     ' For Each w In Application.Workbooks
     ' w.Save
     ' Next w
     ' Application.Quit
    End Sub


  • Anzeige

    311 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige