allg. Lösung
23.02.2016 21:56:33
Michael
Hi zusammen,
der Code
Option Explicit
Sub DateiName()
Dim filetoopen As Variant
Dim pfad As String
pfad = Config.Range("C4").Value
ChDrive Mid(pfad, 1, 2)
ChDir pfad
filetoopen = Application.GetOpenFilename("CSV-Daten als *.csv, *.csv")
If filetoopen False Then
Config.Range("c5").Value = filetoopen
Else
Config.Range("C5").Value = "nichts ausgewählt"
End If
End Sub
Sub CSV_Importieren()
Dim pfad As String
Dim a As Variant, a2 As Variant, az As Variant
Dim textspalten As Variant
Dim texteDa As Boolean, mit As Boolean, tmax&
Dim s As String
Dim i&, dNr%, z&, sp&, zl&, spZ&, zlZ&
Dim c As Range
pfad = Config.Range("C5").Value
textspalten = Split(Config.Range("c9").Value, ",")
tmax = UBound(textspalten)
texteDa = tmax > 0
If texteDa Then For i = 0 To tmax: textspalten(i) = textspalten(i) * 1: Next
If pfad "nichts ausgewählt" Then
If Dir(pfad) "" Then
Import.Cells.Clear
dNr = FreeFile
Open pfad For Binary As #dNr
s = Space(LOF(dNr))
Get #dNr, 1, s
Close #dNr
a = Split(s, vbCrLf)
zl = UBound(a)
sp = UBound(Split(a(1), ";"))
a2 = Import.Range("A1", Import.Cells(zl + 1, sp + 1))
For zlZ = 0 To zl - 1
az = Split(a(zlZ), ";")
For spZ = 0 To UBound(az)
a2(zlZ + 1, spZ + 1) = az(spZ)
Next
Next
If texteDa Then
For i = 0 To tmax
sp = textspalten(i)
For zlZ = 1 To zl
a2(zlZ, sp) = "'" & a2(zlZ, sp)
Next
Next
End If
Import.Range("A1", Import.Cells(zl + 1, sp + 1)) = a2
End If
End If
End Sub
liest alles in ein Array ein und holt sich aus dem Config-Blatt die Info, in welchen Spalten die Zahlen (oder besser: Ziffernfolge) als Text übernommen werden sollen.
Der Trick ist, ein "'" voranzustellen: das ist in der Tabelle weder sichtbar, noch wird es ausgedruckt, das ist nur ein Kennzeichen für Excel, daß "Text" folgt.
Das Makro ist nicht völlig durchoptimiert, sollte aber so schon gut fix arbeiten.
Testdatei: https://www.herber.de/bbs/user/103829.xlsm
Schöne Grüße,
Michael
P.S.: In Deiner Datei sind nicht immer führende Nullen vorhanden, so daß evtl. eine nachträgliche Formatierung doch noch Sinn macht.