590 Aufrufe
Gefragt in Datenbanken von

Hallo zusammen,

ich bin VBA "Neuling mit etwas Kontakt".

Folgendes Projekt möchte ich realisieren. Es soll eine Auswertungstabelle werden, jedoch brauch er dazu 3 CSV-Dateien.In jeder CSV stehen 3 Werte mit einer Überschrift. in der Zweiten Zeile beginnen die benötigten Informationen. Diese CSV Dateien können beliebig heißen und an jedem Speicherort liegen. D.h. das der User den Pfad selbst angeben muss, wo diese Datei liegt (Browser Suchfunktion), die er importieren möchte. Per Mausklick soll er jedoch angeben, was das für eine Datei ist (Dafür das Frame-Auswahlfenster).

Diese Datei soll dann in die jeweilige Tabelle und in das richtige Tabellenblatt eingefügt werden (variable an die nächste freie Zeile)

Nun kommt der Haken: Der User muss angeben, von wann die CSV-Datei ist. Das Datum soll per klick bestätigt werden und in die bereits importierte Datei in die Spalte 4 ein der nächsten freien Zeile eingefügt werden - anschließend soll das Programm prüfen, ob sich in Spalte 3 ein Eintrag befindet, wenn dem so ist, soll das eingegebene Datum dupliziert werden, und zwar so lange, bis er in der Spalte 3, in der nächsten Zeile keinen Eintrag mehr findet.

Zur Veranschaulichung habe ich ein par Bilder angefügt.

Sub Datei_Importieren()
     Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
     Const cstrDelim As String = ";" 'Trennzeichen
     
  With Application.FileDialog(msoFileDialogFilePicker)
     .AllowMultiSelect = False
     .Title = "Datei wählen"
     .InitialFileName = "c:\test\"  'Pfad anpassen
     .Filters.Add "CSV-Dateien", "*.csv", 1
     .Filters.Add "Alle Dateien", "*.*", 2
     If .Show = -1 Then
       strFileName = .SelectedItems(1)
     End If
   End With
     
     If strFileName <> "" Then
       Application.ScreenUpdating = False
       Open strFileName For Input As #1
       arrDaten = Split(Input(LOF(1), 1), vbCrLf)
       Close #1
       For lngR = 1 To UBound(arrDaten)
         arrTmp = Split(arrDaten(lngR), cstrDelim)
         If UBound(arrTmp) > -1 Then
           
    With ActiveSheet
        lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        lngLast = Application.Max(lngLast, 1)
        .Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
        = Application.Transpose(Application.Transpose(arrTmp))
        .Cells(lngLast, 11) = Mid(strFileName, InStrRev(strFileName, "\") + 1)
  End With
  
  'last = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row + 1
         
         End If
       Next lngR
     End If
     'Sheets(1).Range("A1")=strFileName 'Dateiname in Blatt1!A1
   End Sub

Kann mir da jemand weiter helfen? Ich habe schon so viel ausprobiert und bin gerade richtig froh, das der Daten import funktioniert. Vielen Dank im voraus :-)

1 Antwort

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo,

du hast ja in deiner Userform auch ein Datum stehen. Ist das das Datum, dass der User eingeben soll oder soll eine neue Eingabe, z.B. über eine Inputbox, erfolgen?

Du schreibst:

... anschließend soll das Programm prüfen, ob sich in Spalte 3 ein Eintrag befindet, wenn dem so ist, soll das eingegebene Datum dupliziert werden, und zwar so lange, bis er in der Spalte 3, in der nächsten Zeile keinen Eintrag mehr findet.

Habe ich das richtig verstanden, dass sobald etwas in Spalte C (Sendungen) steht, in Spalte D in der entsprechenden Zeile dann das eingegebene Datum stehen soll?

Gruß

M.O.

...