Excel Dateien mit mehreren Arbeitsblättern aus mehreren Verzeichnissen gleichzeitig verarbeiten

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Excel Dateien mit mehreren Arbeitsblättern aus mehreren Verzeichnissen gleichzeitig verarbeiten

    Hallo!

    Brauche dringend Hilfe in VB Excel Programmierung.
    Bin grad ziemlich verzweifelt und habe mich hierfür extra gemeldet.

    Folgende Aufgabe:

    Ich möchte zwei Verzeichnisse mit Excel Dateien auswählen.
    Jedes Verzeichnis besteht aus ca 20 Excel Dateien.
    Alle Dateien haben mehrere Arbeitsblätter Jan bis Dez ("Jänner" bis "Dezember")
    Die wichtigen Daten befinden sich in jedem Arbeitsblatt in der gleichen Zeile zwischen C35 und AI35.

    Es soll nun ein Makro gestaltet werden, das jede Datei in beiden Verzeichnissen aufruft und jedes Arbeitsblatt (Jan bis Dez, zwischen C35 und AI35) von allen Dateien überprüft ob dort der Wert höher als 10,5 ist.
    Dies ist die Arbeitszeit in Stunden und kann somit öfters vorkommen.

    Wenn der Wert höher ist, sollte in dem Excel-sheet von dem das Makro gestartet wird, der Dateiname und die Arbeitsblatt- + Zellenbezeichnung (wo der Wert höher als 10,5 ist) aufgelistet werden.
    Im Optimalfall sollte dann ein automatisches E-mail mit Outlook versendet werden können.

    Hoffe irgendjemand da draußen hat genug Programmiererfahrung um mir zu Helfen.
    Steh nämlich grad ziemlich auf der Leitung. ;(

    Besten Dank!
    Das sind deine Teilaufgaben, was davon kannst du NICHT? Bzw. zuerst das Ganze mit EINER Datei und EINEM Arbeitsblatt machen. Danach einfach eine Schleife drumrum.

    schuh-star schrieb:

    jede Datei in beiden Verzeichnissen aufruft


    schuh-star schrieb:

    jedes Arbeitsblatt (Jan bis Dez, zwischen C35 und AI35) von allen Dateien überprüft


    schuh-star schrieb:

    der Wert höher als 10,5 ist.


    schuh-star schrieb:

    Wenn der Wert höher ist, sollte ... der Dateiname und die Arbeitsblatt- + Zellenbezeichnung (wo der Wert höher als 10,5 ist) aufgelistet werden.

    Hallo Sonne,

    anbei meine Ideen zur Lösung.

    sonne75 schrieb:

    jede Datei in beiden Verzeichnissen aufruft


    Visual Basic-Quellcode

    1. Sub Daten_Lesen()
    2. Dim strPath As String, strFile As String, strTabName As String
    3. strPath1 = "C:\Users\test1\"
    4. strPath2 = "C:\Users\test2\"
    5. strTabName = "Jan:Dez"
    6. strFile = Dir(strPath & "*.xls")


    sonne75 schrieb:

    jedes Arbeitsblatt (Jan bis Dez, zwischen C35 und AI35) von allen Dateien überprüft


    Visual Basic-Quellcode

    1. =IF(OR(Jan!C35:AI35;Dez!C35:AI35>10,5);"YES";"NO")


    Dies Zeigt mir ob sich Werte >10,5 in diesem Abschnitt befinden.
    weiß aber nicht wie ich mir die genauen Zellen ausgben lassen kann.
    Außerdem auch nur für eine Datei.

    sonne75 schrieb:

    der Wert höher als 10,5 ist.


    Siehe oben.

    sonne75 schrieb:

    Wenn der Wert höher ist, sollte ... der Dateiname und die Arbeitsblatt- + Zellenbezeichnung (wo der Wert höher als 10,5 ist) aufgelistet werden.


    Visual Basic-Quellcode

    1. With ThisWorkbook.Sheets("Sheet1") 'Name der Ausgabetabelle
    2. .Range("A2:B" & Rows.Count).ClearContents
    3. Do Until strFile = ""
    4. lngR = lngR + 1
    5. .Cells(lngR, 1) = strFile
    6. .Cells(lngR, 2).Formula = "=SUM('" & strPath & "[" & strFile & "]" & _strTabName & "'!$C$35:$AI$35)"
    7. .Cells(lngR, 2) = .Cells(lngR, 2).Value
    8. strFile = Dir
    9. Loop


    Dies gibt mir den Naben der Excel Datei aus und berechnet mir die Summe zwischen C35 und AI35. Kann dies aber nicht in eine brauchbare Form umwandeln.

    Auch das verbinden der Teilaufgaben in einem Code gelingt mir nicht wirklich.. :S

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „schuh-star“ ()

    schuh-star schrieb:

    Visual Basic-Quellcode

    1. =IF(OR(Jan!C35:AI35;Dez!C35:AI35>10,5);"YES";"NO")


    Bist du sicher, dass das VBA ist?
    Ich kann in deinem Code leider nicht wirklich was erkennen. Wo öffnest du überhaupt die Datei?

    Vielleicht melden sich noch Experten( @petaod ), jetzt hast du zumindest dein Problem so gut aufbereitet, dass man damit was anfangen kann ;)

    sonne75 schrieb:

    Vielleicht melden sich noch Experten( @petaod )
    Ich habe schon grob rein geschaut, aber aufgrund mangelnder Ansätze wird vermutlich die Hilfestellung sehr zeitraubend und ich bin derzeit etwas unter Last.

    schuh-star schrieb:

    Ich möchte zwei Verzeichnisse mit Excel Dateien auswählen.
    Jedes Verzeichnis besteht aus ca 20 Excel Dateien.
    Alle Dateien haben mehrere Arbeitsblätter Jan bis Dez ("Jänner" bis "Dezember")
    Die wichtigen Daten befinden sich in jedem Arbeitsblatt in der gleichen Zeile zwischen C35 und AI35.
    Fangen wir mal ganz einfach mit der Grundstruktur an.
    Achtung: Pseudocode (sprachnah, aber nicht ausprogrammiert)

    Beginnen wir das mit einem Verzeichnis. Das zweite ist ja unabhängig und kann später genau so durchlaufen werden.

    Visual Basic-Quellcode

    1. ​Sub CheckFolder
    2. Folder = GetFolderByFileDialog
    3. For Each File in Folder ' mittels FileSystemObject
    4. CheckFile (File)
    5. End If
    6. Next
    7. End Sub
    8. Sub CheckFile(File)
    9. Set wb = Worksheets.Open(File)
    10. For Each ws in wb.Worksheets
    11. For Each Cell in ws.Range("A1:X99")
    12. If Cell.Value > 10.5 Then Debug.Print wb.Fullname, ws.Name, Cell.Address, Value
    13. Next
    14. Next
    15. End Sub


    Versuch mal so eine Grundstruktur reinzubringen und sie zu füllen.
    Wenn's um Einzelfragen geht, können wir gerne weiter helfen, aber für das ganze Paket habe ich keine Lust.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo nochmal :)

    habe gemeinsam mit einem Kollegen einen Code entwickelt, der meine Bedürfnisse weitgehend abdeckt.
    Jedoch benötige ich bei ein paar Kleinigkeiten noch Hilfe.

    Hier mal mein Code:

    Visual Basic-Quellcode

    1. Sub aaaa()
    2. Dim sVerz(1) As String, sFile As String
    3. Dim wksAkt As Worksheet
    4. Dim wks As Worksheet, wkb As Workbook, rng As Range
    5. Dim i As Integer
    6. Const Zeit As Double = 10.5
    7. Set wksAkt = ActiveWorkbook.Sheets(1)
    8. Application.ScreenUpdating = False
    9. For i = 0 To 1
    10. With Application.FileDialog(msoFileDialogFolderPicker)
    11. .Title = "Ordner auswählen"
    12. If .Show = -1 Then
    13. sVerz(i) = .SelectedItems(1)
    14. End If
    15. End With
    16. If sVerz(i) <> "" Then
    17. sVerz(i) = sVerz(i) & "\"
    18. sFile = Dir(sVerz(i) & "*.xls*")
    19. Do While sFile <> ""
    20. Set wkb = Workbooks.Open(sVerz(i) & sFile)
    21. For Each wks In wkb.Worksheets
    22. For Each rng In wks.Range("C35:AI35")
    23. If IsNumeric(rng) Then
    24. If rng > Zeit Then
    25. With wksAkt
    26. With .Cells(Rows.Count, 1).End(xlUp)
    27. .Offset(1, 0) = wkb.Name
    28. .Offset(1, 1) = wks.Name
    29. .Offset(1, 2) = rng.Cells.Offset(-10, 0).Value
    30. .Offset(1, 3) = rng
    31. End With
    32. End With
    33. End If
    34. End If
    35. Next rng
    36. Next wks
    37. wkb.Close False
    38. sFile = Dir
    39. Loop
    40. End If
    41. Next i
    42. Call EmailTest
    43. End Sub
    44. Sub EmailTest()
    45. Dim olApp As Object
    46. Set olApp = CreateObject("Outlook.Application")
    47. With olApp.CreateItem(0)
    48. .To = "test@gmx.at"
    49. .Subject = "Test"
    50. .htmlBody = "Test"
    51. .Attachments.Add "C:\Users\atp00679\Desktop\Excel.xlsm"
    52. .Display
    53. End With
    54. End Sub


    Jedenfalls bin ich draufgekommen, dass ich einen Pfad habe, der 10 Unterordner enthält, wo die Excel sheets drin sind. Komme nun nicht drauf, wie man alle Unterordner automatisch durchsuchen und die Excel Dateien auswerten kann. Der Pfad " C:\Users\atp00679\Desktop\Ordner\" soll bereits fix im Code enthalten sein um den Vorgang automatisch auszuführen.

    ...\Ordner\Unterordner A\ExcelA.xls
    ...\Ordner\Unterordner B\ExcelB.xls
    ...\Ordner\Unterordner C\ExcelC.xls

    Neben diesem Hauptpfad gibt es noch einen Zweiten Hauptpfad "C:\Users\atp00679\Desktop\Ordner2\" der wieder gleich aufgebaut ist.
    Mit der DIR-Funktion hats nicht geklappt. Bitte um Hilfe.


    Vielen Dank im Voraus für die Mühe! :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „schuh-star“ ()