Microsoft Excel

Herbers Excel/VBA-Archiv

Hilfe gesucht für "Selektiver Datenimport"

Betrifft: Hilfe gesucht für "Selektiver Datenimport" von: Stefan
Geschrieben am: 12.06.2013 14:39:37

Hallo zusammen,

nachdem mir insebsondere dieses Forum sehr geholfen hat in den letzten Monaten eine Auftragsvorlage für unsere Audio Produktionen in VBA zu schreiben, stosse ich nun an meine Grenzen.. ;-)

Aufgabenstellung:

In einem Ordner im Netzwerk sammeln sich (automatisch) alle Aufträge (.xls Dateien).
In jedem Auftrag stehen Kundendaten, Preise, etc. (ca. 10 Felder), welche ich in einer neuen Excel Datei, einer Art Auftragsanalyse sammeln möchte.

Der VBA Code in der "Auftragsanalyse" müsste also den Ordner durchsuchen, nachschauen ob neue Aufträge hinzugekommen sind und die entsprechenden Felder eines jeden Auftrages in die Auftragsanalyse fortlaufend schreiben.

Soviel mal dfür den Start, es ist noch komplexer, da die Auftragsanaylse über Tabellenblätter nach Monaten unterteilt ist, aber das läasst sich dann auch noch lösen, da das Auftragsdatum im Filenamen steht...

Ich habe hier schon ein paar Codes gefunden, die in die Richting gehen und ich bin auch sehr lernbereit und wissbegierig, aber in VBA beherrsche ich (zwar immer mehr) nur Grundkenntnisse...

Ich bin für jeden Startansatz dankbar,

liebe Grüße

Stefan

  

Betrifft: AW: Hilfe gesucht für "Selektiver Datenimport" von: Klaus M.vdT.
Geschrieben am: 12.06.2013 14:47:11

Hi Stefan,

das wird eine Menge Arbeit. Per Google findest du fertigen Code um "VBA alle Dateien im Ordner öffnen" zu realisieren, auch mit Unterordnern usw.
Das ganze dann auch noch mit xl2003 ...

Ich lasse den Beitrag hier natürlich offen, falls sich dem jemand annehmen möchte. Wenn du schnell und sicher eine Lösung brauchst, rate ich dir dieses Anliegen mal hier vorzutragen:
https://www.herber.de/develop.html

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Hilfe gesucht für "Selektiver Datenimport" von: Rudi Maintaire
Geschrieben am: 12.06.2013 15:09:17

Hallo,
mal ein Rumpfcode

Sub auftraege()
  Dim sFile As String, wkb As Workbook, lRow As Long
  Const sPfad As String = "c:\temp\"  'anpassen
  sFile = Dir(sPfad & "*.xls*")
  Do While sFile <> ""
    If WorksheetFunction.CountIf(Sheets(1).Columns(1), sFile) = 0 Then
      'Datei wurde noch nicht importiert
      With Sheets(1)
        lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(lRow, 1) = sFile 'Datei merken
      End With
      Set wkb = Workbooks.Open(sPfad & sFile)
        '************************************
        ' hier dein Code um die Daten nach
        'Sheets(1).Cells(lRow,Spalte) zu übertragen
        '************************************
      wkb.Close False
    End If
    sFile = Dir
  Loop
End Sub

Gruß
Rudi


  

Betrifft: AW: Hilfe gesucht für "Selektiver Datenimport" von: Stefan
Geschrieben am: 12.06.2013 16:27:34

Hi Rudi,

vielen Dank schonmal... Durch Auskommentieren von Teilen kann ich ganz gut nachvollziehen, was da passiert, und auch wenn es momenatn nervt, dass man sieht, wie jedes Excel Sheet einzeln geöffnet und geschlossen wird, so ist das momentan sehr hilfreich, um nachvollziehen zu können, was da passiert...

Ich habe deinen Code in ein Modul kopiert und rufe ihn per Command.Button auf.

Beim Aufrufen kopiert es mir die Filenamen in die "Auftragsanalyse" - von Zeile A2 bis Zeile A10 (9 Aufträge als xls Dateien liegen in dem Ordner)... passt also alles...

Bei

'************************************
' hier dein Code um die Daten nach
'Sheets(1).Cells(lRow,Spalte) zu übertragen
'************************************

bräuchte ich noch Hilfe, wie ich bei geöffnetem Einzelauftrag die gewünschten Zellen anspreche und deren Inhalt in spezifische Zellen der Auftragsanaylse schreibe...

"Sheets(1).Cells(lRow,Spalte)" bezieht sich auf meine Auftragsanalyse, also

"Sheets(1).Cells(lRow,Spalte)= ??? "(Rangebezug zum gerade geöffneten Workbook)

Vielen Dank und liebe Grüße

Stefan


  

Betrifft: AW: Hilfe gesucht für "Selektiver Datenimport" von: Rudi Maintaire
Geschrieben am: 12.06.2013 16:52:51

Hallo,
ich kenn ja deine Auftragsmappen nicht.
Bsp.:

Sub auftraege()
  Dim sFile As String, wkb As Workbook, lRow As Long, wksAnalyse As Worksheet
  Application.ScreenUpdating = False 'Flackern aus
  Const sPfad As String = "c:\temp\"  'anpassen
  Set wksAnalyse = ActiveWorkbook.Sheets("Analyse") 'anpassen
  sFile = Dir(sPfad & "*.xls*")
  '
  Do While sFile <> ""
    If WorksheetFunction.CountIf(wksAnalyse.Columns(1), sFile) = 0 Then
      'Datei wurde noch nicht importiert
      With wksAnalyse
        lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(lRow, 1) = sFile 'Datei merken
      End With
      Set wkb = Workbooks.Open(sPfad & sFile)
      With wkb.Sheets(1)
        'Daten aus Auftrag Blatt 1 übertragen
        wksAnalyse.Cells(lRow, 2) = .Range("A1")
        wksAnalyse.Cells(lRow, 3) = .Range("C3")
        wksAnalyse.Cells(lRow, 4) = .Range("D7")
        'etc.
      End With
      wkb.Close False
    End If
    sFile = Dir
  Loop
End Sub



  

Betrifft: AW: Hilfe gesucht für "Selektiver Datenimport" von: fcs
Geschrieben am: 12.06.2013 17:05:51

Hallo Stefan,

hier Rudi's Vorschlag ergänzt um Beispiel für das Übertragen der Daten.
Zusätzlich wird die Bildschirmaktualisierung deaktiviert.

Wenn du die Daten wirklich monatsweise auf Blätter verteilen willst, dann müßte die Zieltabelle noch aus dem im Dateinamen enthaltenen Datum ermittelt werden. Davon rate ich aber ab.
Ich würde alle Auftragsdaten in einem Blatt für die Analyse zusammenstellen und dann per Pivottabellenbericht Auswertungen für die Monate machen.

Gruß
Franz

Sub auftraege()
  Dim sFile As String, wkb As Workbook, lRow As Long, wksQuelle As Worksheet
  Dim wbkAktiv As Workbook, wksZiel As Worksheet
  Const sPfad As String = "c:\temp\"  'anpassen
  Set wbkAktiv = ActiveWorkbook
  sFile = Dir(sPfad & "*.xls*")
  Application.ScreenUpdating = False
  Do While sFile <> ""
    Set wksZiel = wbkAktiv.Worksheets("Auftragsanalyse") 'Blattname anpassen!
    If WorksheetFunction.CountIf(wksZiel.Columns(1), sFile) = 0 Then
      'Datei wurde noch nicht importiert
      With wksZiel
        lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(lRow, 1) = sFile 'Datei merken
      End With
      Set wkb = Workbooks.Open(sPfad & sFile)
        '************************************
        ' hier dein Code um die Daten nach
        'Sheets(1).Cells(lRow,Spalte) zu übertragen
        '************************************
      Set wksQuelle = wbk.Worksheets(1)
      wksZiel.Cells(lRow, 2).Value = wksQuelle.Range("B2").Value
      wksZiel.Cells(lRow, 3).Value = wksQuelle.Cells(2, 3).Value
      
      Set wksQuelle = nthing
      wkb.Close False
    End If
    sFile = Dir
  Loop
  Application.ScreenUpdating = True
End Sub



  

Betrifft: AW: Hilfe gesucht für "Selektiver Datenimport" von: Stefan
Geschrieben am: 12.06.2013 17:26:24

Wow... an alle erstmal vielen Dank... im Ansatz funktionieren meine ersten Tests schon ganz gut, der Rest ist jetzt Formatierungssache und die richtige Verteilung der Daten auf die Monate...
Pivottabellen Verteilung auf andere Tabellenblätter schau ich mir mal an, guter Tipp...
Daten müssen zudem ja noch nach Auftragsart (Auch im Filenamen hinterlegt) sortiert werden... ;-)

Vielen Dank schonmal, bitt enoch nicht schliessen, ich melde mich die TAge mit einer Rückmeldung..

Liebe Grüße

Stefan