Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Import von csv Dateien

Frage Entwicklung VB for Applications

Mitglied: KurinoKi

KurinoKi (Level 1) - Jetzt verbinden

02.09.2014 um 14:08 Uhr, 1346 Aufrufe, 6 Kommentare

Hallo,

ich verwende bereits folgendes Skript für den Import meiner csv Dateien.

Bei dem Import sollten die Spalten A, B, C, F als Text fomartiert werden.

Die Dateien sollen untereinander eingelesen werden. Eine Datei besteht aus einer Kopfzeile und x Positionszeilen und danach soll in der übernächsten Zeile mit der nächsten Datei die sich im Verzeichnis befindet forgefahren werden.

Können die eingelesenen Dateien danach in ein anders Verzeichnis verschoben werden.

Es können alle Informationen in dem selben Tabellenblatt eingefügt werden. Ich benötige hier keine Trennung.

Herzlichen Dank schon jetzt an alle Helfer

Viele Grüße

Stephy


Sub ImportiereCSVDateien()
Const CSVPFAD = "M:\SAGE\kleyling\Export\ResponseWA"
Dim wbTarget As Workbook, wbSource As Workbook, ws As Worksheet, ts As Worksheet
Set FSO = CreateObject("Scripting.Filesystemobject")
Set wbTarget = ActiveWorkbook
Application.DisplayAlerts = False
'Lösche alle Worksheets bevor wir alle neu anlegen
While wbTarget.Worksheets.Count > 1
wbTarget.Worksheets(1).Delete
Wend
wbTarget.Worksheets(1).Name = "Zusammenfassung"
wbTarget.Worksheets(1).Range("A:ZZ").Clear
For Each f In FSO.GetFolder(CSVPFAD).Files
If LCase(Right(f.Name, 3)) = "csv" Then
Workbooks.OpenText Filename:=f.Path
Set wbSource = ActiveWorkbook
On Error Resume Next
Set ws = wbTarget.Worksheets(f.Name)
If Err <> 0 Then
Set ws = wbTarget.Worksheets.Add
ws.Name = f.Name
ws.Range("A:ZZ").Clear
End If

wbSource.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True
wbSource.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")
wbSource.Close False
End If
Next
Set ts = wbTarget.Worksheets("Zusammenfassung")
Dim curCell As Range
Set curCell = ts.Range("A1")
For i = 1 To wbTarget.Worksheets.Count - 1
maxRow = wbTarget.Worksheets(i).Range("A1").End(xlDown).Row
maxCol = wbTarget.Worksheets(i).Range("A1").End(xlToRight).Column
wbTarget.Worksheets(i).Range(wbTarget.Worksheets(i).Cells(1, 1), wbTarget.Worksheets(i).Cells(maxRow, maxCol)).Copy Destination:=curCell
Set curCell = curCell.End(xlDown).Offset(2, 0)
Next
Application.DisplayAlerts = True
Set FSO = Nothing
End Sub

Mitglied: Meierjo
02.09.2014 um 16:35 Uhr
Hallo Stephy

du willst nur die spalten A B C F als Text importieren.
Sollen die restlichen Spalten als Standart importiert werden, oder gar nicht importiert werden?
Haben die CSV Dateien jedesmal die gleiche Anzahl Spalten?
Welches Zeichen wird als Feldtrenner im CSV verwendet?

Gruss meierjo
Bitte warten ..
Mitglied: Meierjo
03.09.2014, aktualisiert 04.09.2014
Hallo

Dein Code scheint ja schon alles richtig zu machen, oder??

Können die eingelesenen Dateien danach in ein anders Verzeichnis verschoben werden.

01.
    Application.DisplayAlerts = True 
02.
     
03.
    Dim strQuelle As String 
04.
    Dim strZiel As String 
05.
    Dim objFSO As Object 
06.
      
07.
    strQuelle = ""M:\SAGE\kleyling\Export\ResponseWA\*.csv" 
08.
    If Dir(strQuelle) = "" Then MsgBox "Nix da!": Exit Sub 
09.
    strZiel = ""M:\SAGE\kleyling\Export\ResponseWA\Backup\" 
10.
    If Dir(strZiel) = "" Then MkDir (strZiel) 
11.
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
12.
    objFSO.MoveFile strQuelle, strZiel 
13.
     
14.
    Set objFSO = Nothing 
15.
    Set FSO = Nothing
in deinem Code am ende einfügen, und alle CSV werden in den Ordner Backup verschoben

Gruss
Bitte warten ..
Mitglied: KurinoKi
04.09.2014 um 09:08 Uhr
Hallo,

ja die restlichen Spalten können als Standard importiert werden und die Headline gehen von Spalte A-N und Positionsdeateils von A-J.

Als Trennzeichen wird ein Semikolon verwendet.

Das Skript ist toll, das einzige Problem ist, dass bei den Positionen nicht immer alle Spalten in die Zusammenfassung übernommen werden (I&J) und dass eben die gewünschten Spalten nicht als Text formatiert sind.

Vielen Dank für die Hilfe

Viele Grüße

Stephy
Bitte warten ..
Mitglied: Meierjo
04.09.2014, aktualisiert um 16:12 Uhr
Das Skript ist toll, das einzige Problem ist, dass bei den Positionen nicht immer alle Spalten in die Zusammenfassung
übernommen werden (I&J) und dass eben die gewünschten Spalten nicht als Text formatiert sind.

In folgender Code-Zeile springst du nach rechts zur letzten Zelle mit Inhalt
maxCol = wbTarget.Worksheets(i).Range("A1").End(xlToRight).Column
Wenn nun aber leere Zellen in der Tabelle sind, springt der Cursor nur bis vor die erste Zelle mit Inhalt

Du willst ja aber sowieos nur die Spalten A:N importieren, also kannst du den Code folgendermassen anpassen
maxCol = 14 (N ist der 14. Buchstabe im Alphabet)

Nach dem Import folgende CodeZeile einfügen
Range("A:C,F:F").NumberFormat = "@"

formatiert die Spalten A-C und F im TextFormat


01.
  
02.
Sub ImportiereCSVDateien() 
03.
    'Const CSVPFAD = "M:\SAGE\kleyling\Export\ResponseWA" 
04.
    Const CSVPFAD = "D:\CSV-IMP" 
05.
    Dim wbTarget As Workbook, wbSource As Workbook, ws As Worksheet, ts As Worksheet 
06.
    Set FSO = CreateObject("Scripting.Filesystemobject") 
07.
    Set wbTarget = ActiveWorkbook 
08.
    Application.DisplayAlerts = False 
09.
    'Lösche alle Worksheets bevor wir alle neu anlegen 
10.
    While wbTarget.Worksheets.Count > 1 
11.
        wbTarget.Worksheets(1).Delete 
12.
    Wend 
13.
    wbTarget.Worksheets(1).Name = "Zusammenfassung" 
14.
    wbTarget.Worksheets(1).Range("A:ZZ").Clear 
15.
    For Each f In FSO.GetFolder(CSVPFAD).Files 
16.
        If LCase(Right(f.Name, 3)) = "csv" Then 
17.
        Workbooks.OpenText Filename:=f.Path 
18.
        Set wbSource = ActiveWorkbook 
19.
        On Error Resume Next 
20.
        Set ws = wbTarget.Worksheets(f.Name) 
21.
        If Err <> 0 Then 
22.
            Set ws = wbTarget.Worksheets.Add 
23.
            ws.Name = f.Name 
24.
            ws.Range("A:ZZ").Clear 
25.
        End If 
26.
        On Error GoTo 0 
27.
        wbSource.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True 
28.
        wbSource.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1") 
29.
        wbSource.Close False 
30.
        End If 
31.
    Next 
32.
     
33.
    Set ts = wbTarget.Worksheets("Zusammenfassung") 
34.
    Dim curCell As Range 
35.
    Set curCell = ts.Range("A1") 
36.
    For i = 1 To wbTarget.Worksheets.Count - 1 
37.
        'maxRow = wbTarget.Worksheets(i).Range("A1").End(xlDown).Row 
38.
        maxRow = wbTarget.Worksheets(i).Range("A65536").End(xlUp).Row 
39.
        'maxCol = wbTarget.Worksheets(i).Range("A1").End(xlToRight).Column 
40.
        maxCol = 14 
41.
        wbTarget.Worksheets(i).Range(wbTarget.Worksheets(i).Cells(1, 1), wbTarget.Worksheets(i).Cells(maxRow, maxCol)).Copy Destination:=curCell 
42.
        Set curCell = curCell.End(xlDown).Offset(2, 0) 
43.
    Next 
44.
        
45.
    Application.DisplayAlerts = True 
46.
     
47.
    Range("A:C,F:F").NumberFormat = "@" 
48.
     
49.
    Dim strQuelle As String 
50.
    Dim strZiel As String 
51.
    Dim objFSO As Object 
52.
      
53.
    strQuelle = CSVPFAD & "\*.csv" 
54.
    If Dir(strQuelle) = "" Then MsgBox "Nix da!": Exit Sub 
55.
    strZiel = CSVPFAD & "\Backup\" 
56.
    If Dir(strZiel) = "" Then MkDir (strZiel) 
57.
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
58.
    objFSO.MoveFile strQuelle, strZiel 
59.
     
60.
    Set objFSO = Nothing 
61.
    Set FSO = Nothing 
62.
 End Sub


Gruss
Bitte warten ..
Mitglied: KurinoKi
10.09.2014 um 15:41 Uhr
Hallo Meuerjo,

ja die restlichen Spalten sollen als Standard importiert werden und die Anzahl der Spalten ist immer identisch und die Dateien unterscheiden sich lediglich in der Zeilenanzahl.
Als Trennzeichen wird Semikolon verwendet.

Vielen Dank

Viele Grüße
Stephy
Bitte warten ..
Mitglied: Meierjo
10.09.2014 um 15:49 Uhr
Hallo Stephy

Also, den oben stehenden Code schon probiert? Funktioniert er zu deiner Zufriedenheit??

Gruss
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Wie mittels VBA beim Import von CSV dateien das Format aller Zellen auf "Zahl" ändern? (2)

Frage von Glibber4 zum Thema VB for Applications ...

Batch & Shell
gelöst 2 Csv -Dateien zum Teil zusammenfügen (6)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
gelöst CSV Dateien auswerten mit Script (8)

Frage von Crank69 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...