Hallo,
Erstmal meine Daten:
-
Meine CSV Datei sieht folgendermaßen aus:
Keine definierten Spaltennamen (das soll auch so bleiben)!
Dateiname: Gruppe_01
Spalte 1 Spalte 2 Spalte 3 Spalte 4 Spalte 5 Spalte 6 [...] Spalte 500
Zeile 1 Text Text Text Text Text Text Text
Zeile 2 Text TextB TextC TextD TextE TextF TextY
Zeile 3 ZahlA ZahlB ZahlC ZahlD ZahlE ZahlF ZahlY
Zeile 4 Text
[...]
--> In welche Tabelle die CSV Datei importiert wird bestimmt der Dateiname der immer gleich aufgebaut ist: Gruppe_XX
2. Access Tabelle Gruppe_01 (so soll der Import später aussehen)
Gruppennummer Progammnummer Programmname <-- es soll nur 3 Spalten geben!
ZahlA ZahlB TextB
ZahlA ZahlC TextC
ZahlA ZahlD TextD
ZahlA ZahlE TextE
[...]
Zahl A ZahlY TextY (wäre in der CSV Datei Spalte 500)
Was ich bisher gefunden habe:
1. CSV Datei in Tabelle importieren
Option Compare Database
Private Sub ButtonImport_Click()
Dim strTabellenname As String
Dim strDateipfad As String
strTabellenname = "Tabelle1"
strDateipfad = "C:\Users\m.hofelich\Downloads\Test.csv"
Call csvDateiInTabelleEinlesen(strTabellenname, strDateipfad)
End Sub
Public Sub csvDateiInTabelleEinlesen(ByVal Tabellenname As String, ByVal Dateipfad As String)
'Die erste Zeile der csv-Datei muss die Spaltenüberschriften enthalten.
'Falls die Tabelle bereits existiert, wird sie gelöscht.
'Quelle: http://www.dbwiki.net/
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim d As Long
Dim Zeile As Variant
Dim arrWerte As Variant
Dim i As Integer
Dim j As Integer
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim fldname As String
Set db = CurrentDb
'Tabelle löschen, falls sie schon existiert
On Error Resume Next
db.TableDefs.Delete Tabellenname
On Error GoTo 0
'csv-Datei öffnen
d = FreeFile
Open Dateipfad For Input As #d
'Datei zeilenweise durchlaufen
Do While Not EOF(d)
'Zeile auslesen, einzelne Werte in Array einlesen
Line Input #d, Zeile
arrWerte = Split(Zeile, ";")
j = j + 1
'Tabellennamen aus der ersten Zeile (=Überschriften) auslesen
If j = 1 Then
'Array durchlaufen
For i = 0 To UBound(arrWerte)
'Wenn kein Wert existiert
If arrWerte(i) = "" Then
fldname = "Spalte " & i + 1
Else
fldname = arrWerte(i)
'Ungültige Zeichen ersetzen
fldname = Replace(fldname, Chr(10), " ")
fldname = Replace(fldname, Chr(34), "")
fldname = Replace(fldname, ".", "_")
fldname = Replace(fldname, "!", "")
End If
'Spalte 1
If i = 0 Then
'TableDef-Objekt erstellen
Set tdf = db.CreateTableDef(Tabellenname)
' Die neue Tabelle muß mindestens 1 Feld enthalten: Feld anlegen
Set fld = tdf.CreateField(fldname, dbText, 255)
' Field-Objekt an Fields-Auflistung des TableDef-Objekts anfügen.
tdf.Fields.Append fld
tdf.Fields.Refresh
' TableDef-Objekt an TableDefs-Auflistung der Datenbank anfügen
db.TableDefs.Append tdf
db.TableDefs.Refresh
Else
'Fieldobjekt erzeugen
Set fld = tdf.CreateField(fldname, dbText, 255)
' Field-Objekt an Fields-Auflistung des TableDef-Objekts anfügen.
tdf.Fields.Append fld
tdf.Fields.Refresh
'Speicher freigeben
Set fld = Nothing
End If
Next i
'Speicher freigeben
Set tdf = Nothing
'Tabelle in Recordset einlesen
Set rs = CurrentDb.OpenRecordset(Tabellenname, dbOpenDynaset)
'Werte in Tabelle einlesen
Else
rs.AddNew
For i = 0 To UBound(arrWerte)
rs(i) = IIf(arrWerte(i) = "", Null, Left(arrWerte(i), 255))
Next i
rs.Update
End If
Loop
Close #d
End Sub
Meine Problemstellung lautet nun:
1. Wie kann ich die CSV Datei auf den Wert ZahlA überprüfen um ZahlA anschließend in jede neue Zeile von "Gruppennummer" in der Access Tabelle einzufügen?
2. ZahlB soll in "Programmnummer" eingefügt werden und TextB in "Programmname" --> Das nätürlich bis kein Wert mehr vorhanden ist.
Ablauf:
1. Ich habe ein Access Formular, dort gibt es einen Button.
2. Klickt man auf diesen Button öffnet sich ein FileChose Dialog mit dem man die Datei auswählt (z.B. Gruppe_01) --> Dateiname = Tabellenanme
3. Nun sollen die Wert in die Access Tabelle importiert werden
--> Was cool wäre:
Man kann beim importieren mehrere Dateien auswählen und die Dateien werden jeweils in ihre eigene Tabelle importiert (Dateiname = Tabellenname)
Das sollte dann sowohl mit einer als auch mit mehreren Dateien funktionieren.
Ich freue mich über jede Hilfe.
|