Thema Datum  Von Nutzer Rating
Antwort
Rot Access VBA - CSV Datei auf Wert überprüfen und importieren
20.03.2018 08:54:32 Markus Hofelich
*****
NotSolved
20.03.2018 08:56:39 Markus Hofelich
NotSolved
20.03.2018 09:52:30 Gast76886
NotSolved
20.03.2018 09:56:45 Gast90342
NotSolved
20.03.2018 11:59:04 SJ
NotSolved
22.03.2018 09:01:20 SJ
NotSolved

Ansicht des Beitrags:
Von:
Markus Hofelich
Datum:
20.03.2018 08:54:32
Views:
1283
Rating: Antwort:
  Ja
Thema:
Access VBA - CSV Datei auf Wert überprüfen und importieren

Hallo,

 

Erstmal meine Daten:

  1. 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.
 

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Access VBA - CSV Datei auf Wert überprüfen und importieren
20.03.2018 08:54:32 Markus Hofelich
*****
NotSolved
20.03.2018 08:56:39 Markus Hofelich
NotSolved
20.03.2018 09:52:30 Gast76886
NotSolved
20.03.2018 09:56:45 Gast90342
NotSolved
20.03.2018 11:59:04 SJ
NotSolved
22.03.2018 09:01:20 SJ
NotSolved