einen gazen Ordner durchsuchen

  • Excel

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von raist10.

    einen gazen Ordner durchsuchen

    hallo liebe Leute,

    ich bins wieder :rolleyes:
    da mir immer so toll geholfen wird, schreibe ich euch nocheinmal an:)

    ich hab schon im innternet durchsucht, aber eine passende Syntax nicht gefunden:(

    also ich hab eien ordner "ASDFG" und in diesen Ordner sind 15 Dateien drinnen. wie schon in einen anderen Thema geschrieben, hab ich eine Variable pnr und ich möchte diese prüfen.
    ich möchte eine schleife erstellen, die die ganzen 15 Dateien im Ornder durchgeht, wenn sie diese bestimmte pnr in einen der 15 .xls Dateienn gefunden hat, daraus die stunden ziehen.

    mir fällt aber absolut nicht en, wie ich das machen könnte,, bin total planlos.

    freue mich über jede Hilfe:)

    danke schoneinmal im Voraus


    LG yasi
    Hallo Yasi!

    Bin wieder zurück aus dem Urlaub, mal gucken ob ich Dir helfen kann. ;)

    Alle Mappen eines Verzeichnisses kannst Du in etwa so abarbeiten:

    Public Sub MappenAbarbeiten()

    Dim objFSO As Object
    Dim objVerz As Object
    Dim objDatei As Object
    Dim objDateien As Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objVerz = objFSO.GetFolder("C:\MeinOrdner\")
    Set objDateien = objVerz.Files

    For Each objDatei In objDateien
    ' was nu zu tun ist ist die anderen Frage ^^
    Next objDatei

    End Sub

    Ich denke am sinnvollsten wäre es die Datei zu öffnen und zu gucken ob der Suchbegriff stimmt, wenn ja gewünschte Aktion ausführen.

    Öffnen kannst Du die Datei mit Workbooks.Open objDatei.Path und nach Abarbeitung schliessen mit Workbooks(objDatei.Name).Close.

    Gruß

    Rainer
    Hallo Rainer,

    cool das du wieder da bist:) und danke füe deine schnelle antwort:)wo warst denn im Urlaub?

    Also ich denke du konntest mir schon weiterhelfen, problem: "Excel kann auf die datei nicht zugreifen-schreibgeschützt!". ich hab den Schreibschutz weggemacht, aber er kommt immer und immer wieder, wie kann ich das Problem lösen?

    LG yasi:)
    Tja, die Frage ist wo der Schreibschutz steckt. Ist es der Schutz für die Mappe, dann ist es einfach:

    Workbooks.Open Filename:="C:MeinOrdner\MeineDatei.xls", Password:="MeinPasswort"

    Ist es der Schreibschutz für die Mappe, dann fügst Du einfach noch in die Open-Anweisung folgendes ein:

    , WriteResPassword:="MeinSchreibschutzPasswort"

    Das wären jetzt erstmal die beiden Möglichkeiten beim Öffnen der Datei trotz gesetzten Schreibschutz zu öffnen.

    Gruß

    Rainer
    Ist es ein Netzwerkordner? Wenn ja, ist er freigegeben?

    Ansonsten prüfen mal die Attribute der Dateien, vllt. sind die auf Schreibschutz gestellt.

    Hhmmm ... oder hast Du die Dateien evtl. auf einer CD-Rom liegen?

    Gruß

    Rainer
    weder auf cd-rom noch ein NetzwerkOrdner.

    er heisst Stundenzettel und liegt auf meinen Desktop. In diesem Ordner sind halt jede Menge zu prüfende Dateien.
    ich hoffe du weisst was ich meine. Also ein gaz ganz ganz stinknormaler Ordner:D

    grüßle
    Hhhmmm ... Attribute geprüft?

    Ansonsten öffne mal die Datein per Hand und gucke wann Du was für ein Passwort eingeben musst. Dann solltest Du im Prinzip den Zeitpunkt erkennen können wo das Makro ein Password braucht um die Datei zu öffnen.

    Aber mit ungeschützten Datei müsste es ja auf jeden Fall funktionieren. ;)

    Gruß

    Rainer
    das komische ist ja, ich uss garkein passwort eingeben.
    auch wen ich es öffne kommt dieser fehler.
    attribute müssten stimmen, ich poste mal den code


    Sub Einlesen_Stundenlohn()

    Dim objFSO As Object
    Dim objVerz As Object
    Dim objDatei As Object
    Dim objDateien As Object

    'Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objVerz = objFSO.GetFolder("C:\Dokumente und Einstellungen\tommy\Desktop\timesheets")
    Set objDateien = objVerz.Files

    For Each objDatei In objDateien


    introw = 5
    zelle = wb1.Sheets(1).Cells(1, 12)

    For Each pnr In wb3.Sheets(1).Range("a1:a20").Cells
    If zelle = pnr Then
    gefunden = True
    cost = wb3.Sheets(1).Cells(introw, 4)
    End If
    Next
    cost = wb3.Sheets(1).Cells(introw, 4).Value

    Next objDatei

    Do While wb2.Sheets(1).Cells(introw, 2) <> ""
    std = wb2.Sheets(1).Cells(introw, 2).Value * cost
    wb2.Sheets(1).Cells(introw, 3) = std
    introw = introw + 1
    Loop



    End Sub




    hoffe der hilft dir weiter:)

    liebe grüßle:)
    Hhhmmmm ... nun ja ... mal sehen:

    'Set objFSO = CreateObject("Scripting.FileSystemObject")

    Ich hoffe das Hochkomma vor dieser Zeile ist nicht wirklich im Code, wenn ja raus damit.

    Set objVerz = objFSO.GetFolder("C:\Dokumente und Einstellungen\tommy\Desktop\timesheets")

    Am Ende des Pfades fehlt ein "\" ... der Pfad muss geschlossen sein. Hatte ich aber auch in meinem Beispiel-Code so geschrieben. Das sind leider nicht ganz unwichtige Kleinigkeiten. Musst Du besser drauf achten. ;)

    Und der Rest danach kann an sich nicht funktionieren, zumindest wenn der Code den Du gepostet hast alles ist. ^^

    Zuerst solltest Du die mit For Each objDatei gelesene Mappe öffnen, bevor Du auf sie zugreifst. Wie das geht habe ich zuvor schon gepostet.

    Die komplette Variabelen-Deklaration/-Zuweisung fehlt ... pnr, wb1, wb2 und wb3 ist weder deklariert noch sind die objekt per Set zugewiesen, bzw. Excel soll ohne Referenzierung nun wissen welche Mappe mit wb1 gemeint ist. Excel kann ja viel, aber soweit ich weiss noch nicht hellsehen. ;)

    Net böse sein, aber bevor Du weiter programmierst solltest Du mal dringendst Dich mit dem Thema Variabelen-Deklaration/-Typen und Referenzierung beschäftigen, sonst wird das nie was mit Dir und VBA. Beginn zuerst mal damit das Du im VBE-Editor die Option "Option Explicit" anschaltest. Im Regelfall müsste nun der Compiler von Excel beim Testlauf sofort los maulen das pnr, wb1 - wb3 nicht deklariert sind. Hole im Code die Deklarationen nach und mache auch die Zuweisungen.

    Und dann poste den Code nochmal.

    Gruß

    Rainer
    hallo rainr, vielen Dank fuer deine Muehe, aber ich habe alles schon deklariert. Und Option Explicit ist auch da, nur halt ich mach das ganze global, damit meine Deklarationen auf alle meine Subs zugreifen koennen, und das mit der for each ist aufjedenfall ein punkt den ich gleich ausprobieren werde:)
    und das hochkomma, keine ahnung wie es dahin kommt, es ist aufjedefall nicht da, aber...den slash hatte ich vergessen, vielen vielen dank fuer deinen Hinweis, hoffe es klappt jetzt gleich melde mich danach noch einmal:)


    Vielen lieben Dank

    Lieben Gruss


    yasiii
    Nein. wb3 kann nie und nimmer ThisWorkbook sein. ;)

    Ausser Du willst nur die Bereiche in dem Workbook durchsuchen in dem das Makro direkt drinnen steht. Aber dann ist die Frage wofür brauchst Du die Schleife die jede Datei im Ordner abarbeitet wenn Du nur ThisWorkbook durchsuchen willst. ;) Von daher ... weisst Du es wirklich? Irgendwie habe ich die Ahnung das nicht. ^^

    Also langsam:



    For Each objDatei In objDateien

    ' jetzt datei öffnen

    Workbooks.Open Filename:=objDatei.FullName

    set wb3 = Workbooks(objDatei.Name)

    Dann durchsuchst Du mit den nachfolgenden Anweisungen das geöffnete Workbook. Wobei die Frage ist was ist wb1, wenn wb3 ThisWorkboook sein soll? o_O

    Diesen Codeteil meine ich:

    zelle = wb1.Sheets(1).Cells(1, 12)

    For Each pnr In wb3.Sheets(1).Range("a1:a20").Cells

    If zelle = pnr Then
    gefunden = True
    cost = wb3.Sheets(1).Cells(introw, 4)
    End If
    Next
    cost = wb3.Sheets(1).Cells(introw, 4).Value

    Next objDatei

    Im Prinzip macht der nicht wirklich Sinn. Erstmal als was ist pnr deklariert? Ist es ein String, ein Integer, ein Object oder eine Range? Ist es was anderes als ein Range, dann wüde es mich wundern wenn das Teil überhaupt einen Treffer produziert.

    zelle ist immer gleich Inhalt aus wb1, Sheet 1 Zelle L1.

    Nun durchsuchst Du jedes pnr in wb3, damit müßte logischerweise das zu durchsuchende Workbook das neu geöffnete Workbook aus der Open-Schleife für jede Datei des Verzeichnisses sein. Du prüfst ob der Inhalt in pnr = dem Inhalt aus wb1 Sheet1 Zelle L1 ist. Damit müsste wb1 konstant das gleiche Workbook sein und damit eigentlich ThisWorkbook, also das Workbook in dem das Marko steht. Wenn Inhalt aus Zelle mit Inhalt von pnr aus wb3 übereinstimmt, wird die Variabele cost mit dem Inhalt aus wb3, Sheet 1 Zelle D5 gefüllt.

    Nachdem die Schleife alle pnr's in wb3 durchgearbeitet hat (gibt es mehrere Treffer dann wird jedesmal cost überschrieben mit dem neuen Treffer) und Cost auf Grund Treffer den Inhalt von Zelle D5 hat, dann kommt direkt nach der Schleife die Anweisung das der Inhalt von Cost überschrieben wird und zwar mit dem Inhalt von Zelle D5 aus Sheet 1 wb3 und zwar egal ob die Bedingung zelle = pnr stimmt oder nicht.

    Und dann kommt Next objDatei ... du lässt objDatei die nächste Datei im Verzeichnis laden, aber in Deinem Code den du gepostet hast öffnest Du die Datei nicht und setzt wb3 auch nicht neu, das geht auch gar nicht mit globaler Referenzierung, sondern nur mit lokaler Referenzierung. Also egal wie oft die Schleife objDatei durchlaufen wird, Du arbeitest immer nur mit den gleichen Workbooks. Ausser Du fügst die Zeile mit Workbooks.Open, set wb3 = ein, dann bekommt wb3 endlich für jeden Scheifendurchlauf ein neues Workbook zum abarbeiten als Inhalt (ABER bitte ... vor Next objDatei muss dann auch dringend Workbooks(objDatei.Name).Close SaveChanges:=False oder True ^^ rein). Die Schleifenabfrage mit if zelle = pnr kannst Du Dir an sich komplett sparen, da pnr IMMER den Inhalt von Zelle D5 aus Sheet 1 aus wb3 erhält. Okay, zwar wird dann nicht der Boolean Wert für gefunden auf True gesetzt, ist aber auch irgendwie Schwachsinn da bei sagen wir mal 10 - 20 Dateien die durch objDatei verarbeitet werden, gefunden eh irgendwann mal True erhält ... völlig wurscht ob der Treffer beim ersten Workbook oder beim letzten Workbook dabei war. Und somit die Aussagekraft von gefunden eh was für den Pops ist.

    Und vor allem ... cost beinhaltet eh immer nur den Wert der Zelle D5 aus Sheet1 des letzten Workbooks das Du ausliest. Die anderen davor kannst Du Dir ja im Prinzip sparen, denn Cost wird ja bei jedem Schleifendurchlauf egal ob zelle = pnr stimmt oder nicht immer den Wert des gerade eingelesenen wb3's annehmen und damit am Ende der Schleife für objDateien IMMER den Wert aus D5 des letzten verarbeiteten Workbooks beinhalten.

    Aber nun zum dicken Ei ... was zum Henker ist wb2? Was tut das in dem Code woher kommt das wo wurde das geöffnet? Ich nehme schwer an das das genau die Zeile ist an der Excel meckert. Die Schleife für objDatei ist ja im Bruchteil einer Sekunde abgearbeitet, egal wieviel WB's im Ordner liegen, da Du die WB's die jedes Mal in objDatei eingelesen werden in keinster Weise verarbeitest und somit kann Excel innerhalb der Schleife objDatei nicht maulen, da es dort ja gar nix öffnet ... ausser den Zugriff auf wb3, bzw. wb1.

    Wenn Du jetzt fragst, was ich für einen Schwachsinn schreibe ... das ist das was Dein Code tut. Also ich wundere mich nicht wirklich das der Code nicht das tut was Du willst, kann er ja auch gar nicht. ;)

    Also denk mal genau nach, was soll genau passieren wenn zelle = pnr in dem gerade geöffneten Workbook ist? Cost soll einen neuen Wert erhalten ... soweit so gut, aber dann musst Du Cost auch sofort verarbeiten, da beim nächsten Schleifendurchlauf Cost sofort wieder einen anderen Inhalt bekommt. Oder Du definierst Cost als Datenfeld(entweder ein Array oder eine Collection), dann kannst Du bei jedem Treffer den Inhalt da rein lesen und das Datenfeld nacheinander in einer anderen Sub verarbeiten nachdem Du alle Workbooks mit der Schleife durchlaufen hast. Bloss ich befürchte Dir fehlt dann der Bezug, also aus welchem Workbook stammt nun der Wert den das Array im Index 0 oder 1 hat, bzw. aus welchem Workbook stammt der Wert den die Collection im Index 1 hat, kannst zwar Key's in einer Collection vergeben, aber diese nicht auslesen sondern nur als Ansprache für den Wertinhalt nutzen.

    Soviel mal wieder von mir.

    Gruß

    Rainer

    P.S.: Nächste Antwort nur noch wenn Du einen Code postest den Du auf Grund meiner Hinweise überarbeitet hast. ^^
    Hallo lieber Rainer,

    also ich bin auf alles eingegangen, meine bedingungen stimmen in diesem Fall schon.
    pnr ist als Long deklariert,
    wb3. ist Thisworkbook, weil ich da dateien habe die geprüft werden müssen, und wb2 ist jetzt mein Pfad der geöffnet werden soll. wb1 wurde entfernt, und gelöscht. Mit Hilfe hab ich einen anderen Code erstellt, wo die Pfade als Variant deklariert sind, eine art array:

    varPfad(0) = "C:\Dokumente und Einstellungen\ybeyaz.SPRINGFIELD\Eigene Dateien\timesheets\yasmin.xls"
    varPfad(1) = "C:\Dokumente und Einstellungen\ybeyaz.SPRINGFIELD\Eigene Dateien\timesheets\mirco.xls"


    For lngCounter1 = 0 To 1
    introw = 8
    Set wb1 = Workbooks.Open(varPfad(lngCounter1))

    Do Until wb1.Sheets(1).Cells(introw, 2) = ""
    loLetzte1 = wb2.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    lngZeile1 = loLetzte1 + 1
    If loLetzte1 <= 10 Then loLetzte1 = 10
    For lngCounter2 = 10 To loLetzte1
    If wb2.Sheets(1).Cells(lngCounter2, 1) = wb1.Sheets(1).Cells(introw, 2) Then blGefunden = True
    Next
    If Not blGefunden Then
    wb2.Sheets(1).Cells(lngZeile1, 1) = wb1.Sheets(1).Cells(introw, 2)
    introw = introw + 1
    lngZeile1 = lngZeile1 + 1

    End If
    blGefunden = False
    Loop
    wb1.Close
    Next
    End Sub

    Ich hab jetzt mal deinen Code da eingefügt, aber da steht dann wieder, dass die Datei nicht geöffnet werden kann, wegen Schreibschutz:

    Dim objFSO As Object
    Dim objVerz As Object
    Dim objDatei As Object
    Dim objDateien As Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objVerz = objFSO.GetFolder("C:\Dokumente und Einstellungen\ybeyaz.SPRINGFIELD\Eigene Dateien\timesheets\")
    Set objDateien = objVerz.Files

    For Each objDatei In objDateien
    For lngCounter1 = 0 To 50
    introw = 8
    Set wb1 = Workbooks.Open(objVerz)

    Do Until wb1.Sheets(1).Cells(introw, 2) = ""
    loLetzte1 = wb2.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    lngZeile1 = loLetzte1 + 1
    If loLetzte1 <= 10 Then loLetzte1 = 10
    For lngCounter2 = 10 To loLetzte1
    If wb2.Sheets(1).Cells(lngCounter2, 1) = wb1.Sheets(1).Cells(introw, 2) Then blGefunden = True
    Next
    If Not blGefunden Then
    wb2.Sheets(1).Cells(lngZeile1, 1) = wb1.Sheets(1).Cells(introw, 2)
    introw = introw + 1
    lngZeile1 = lngZeile1 + 1

    End If
    blGefunden = False
    Loop
    wb1.Close

    Next objDateien
    Next



    Über Hilfe wäre ich euch, sehr dankbar:)

    Liebe Grüße
    *grummel*

    Wenn ich Dir schon Tips geben, könntest Du Sie dann bitte auch korrekt umsetzen. *g*

    Ich meine das hier:

    Set wb1 = Workbooks.Open(objVerz)

    An sich dachte ich das ich sehr sprechend deklariere, von daher meine Frage: Wie zum Teufel kommst Du darauf das man ein Verzeichnis mit Workbooks.Open als Workbook einlesen kann?

    Vor allem nachdem ich Dir 2 Posts drüber die korrekte Anweisung zum Öffnen schon hingeschrieben hatte:

    Workbooks.Open Filename:=objDatei.FullName

    Oder muss ich noch sprechender deklarieren, z.B. so objVerzDasIstEinVerzeichnisUndKannNichtAlsWorkbookGeöffnetWerden? ;)

    Und bitte, bitte gewöhn Dir an die Variabelen in gleicher Schreibweise zu deklarieren, Dein Code liesst sich mit dem Mischmasch an Deklarationen wirklich grausamst. Entweder hat der bezeichnende Präfix vor der Variabele 2 oder 3 Stellen, aber bitte nicht mischen. Und entweder Du machst nach dem Präfix in Englisch oder in Deutsch weiter, aber auch hier bitte nicht mischen. Und wenn Du eine Variabele einen zählenden Zusatz (wie eben 1 oder 2) verpasst, dann bitte auch nur wenn es tatsächlich mehrere Variabelen mit der gleichen Bezeichnung gibt. ;) Und wenn Du ungarische Notation benutzen willst, dann bitte auch durchgängig nicht eine Variabele ungarisch mit Kamelschreibweise, die andere ungarisch ohne Kamelschreibweise und die dritte völlig frei jeglicher Namenskonvention. Und bitte deklariere lokal genutzte Variabelen auch lokal und nicht global. Globale Variabelen deklariert man nur, wenn man diese auch tatsächlich in anderen Modulen nutzen will und zwar mit dem Wert den Sie aus einem Modul erhalten (oder eben wenn es immer ein konstanter Wert sein soll der für mehrere Module/Prozeduren genutzt wird oder man sich freihalten will den Wert einer Variabele die in einem Projekt an mehreren Stellen genutzt wird, schnell an einer einzigen Stelle zu ändern). Aber Sachen wie intZähler/lngZähler werden nie global deklariert auch wenn man in mehreren Modulen diese Zähler nutzt.

    Und ansonsten erhöht es auch eindeutig die Lesbarkeit wenn man seinen Code auskommentiert. Vor allem hilft man sich selber mit einem kurzen Kommentar was da wirklich passieren soll. Ich denke z.B. wenn Du es so gemacht hättest:

    ' aus Schleife eingelesene Datei als Workbook setzen

    Set wbkQuelle = Workbooks.Open(objVerz)

    Wäre Dir vielleicht schon beim Schreiben des Kommentars aufgefallen das da irgendwas nicht stimmen kann, bzw. aufgefallen das die Variabele objDatei besser zum Deinem Kommentar passt als die Variabele objVerz.

    Nur mal so ein paar Tips, die es erstens denjenigen die Dir hier helfen sollen extrem erleichtert Deinen Code schnell zu lesen und zu verstehen (was die Antwortrate i.d.R. extrem erhöht, weil wer antwortet schon auf einen Code in den er sich erstmal eine halbe Stunde einarbeiten muss um zu verstehen was dort passiert ... ausser ich, meine ich ^^) und zweitens hilft es Dir ungemein Deinen Code selber besser zu lesen und damit selber schneller Fehlerquoten zu erkennen und drittens dann auch noch Wochen später schnell zu verstehen was Du da damals mit dem Code bezwecken wolltest. ;)

    Könnte Dir auch bei dieser Stelle weiterhelfen:

    Do Until wb1.Sheets(1).Cells(introw, 2) = ""
    loLetzte1 = wb2.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    lngZeile1 = loLetzte1 + 1
    If loLetzte1 <= 10 Then loLetzte1 = 10
    For lngCounter2 = 10 To loLetzte1
    If wb2.Sheets(1).Cells(lngCounter2, 1) = wb1.Sheets(1).Cells(introw, 2) Then blGefunden = True
    Next
    If Not blGefunden Then
    wb2.Sheets(1).Cells(lngZeile1, 1) = wb1.Sheets(1).Cells(introw, 2)
    introw = introw + 1
    lngZeile1 = lngZeile1 + 1

    End If
    blGefunden = False
    Loop


    Denn hier tritt die Frage auf, was passiert eigentlich wenn blGefunden True ist? Bzw. was soll passieren wenn Bedingung wahr? Das dann einfach nichts passiert kann ja irgendwie nicht im Sinne des Erfinders sein. ;) Und vorallem wird die For Schleife völlig abgearbeitet, egal ob blGefunden beim ersten Durchlauf einen Treffer erzielt oder nicht. Wenn also mehrere Treffer in der Schleife vorkommen, bekommst Du wiederum nur den letzten Treffer mit. Aber stimmt, ist ja egal da Du mit dem Treffer eh nix anfängst, sondern nur bei Nicht-Treffer arbeitest. Hhhmmm ... mal dumme Frage, nur bei Nicht-Treffer wird intRow + 1 hochgezählt für die Do Schleife. Erzielst Du aber einen Treffer, als blGefunden wird auf True gesetzt, dann wird introw nicht um +1 hochgesetzt ... ist das so gewollt?

    Hab jetzt nicht wirklich Lust den Code komplett zu analysieren. ;)

    Gruß

    Rainer

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „raist10“ ()

    so ich hab jetzt die ungarische Notation komplett weggelassen und arbeite ohne weiter...

    zu dem Gefunden?-> Das war eigentlich nur für testzwecke, weil ich wissen wollte, ob er die nummer/projekt usw. nun findet oder nicht.
    Ich geh mir jetzt schon seit einiger Zeit deinen Code durch und ich merke immer wieder ich bin echt total die Niete...

    Mal klappt das eine, dann klappt das andere nicht, und die Fehler kann ich nicht finden.
    ich habe versucht diese testzwecke mti dem gefunden wegzunehmen, aber dann funzt garnichts mehr?!
    aufjedenfall lässt sich der Code so einfacher lesen:

    Dim FSO As Object
    Dim Verz As Object
    Dim Datei As Object
    Dim Dateien As Object
    Dim i As Integer


    Set FSO = CreateObject("Scripting.FileSystemObject")
    Const Path = "C:\Dokumente und Einstellungen\ybeyaz.SPRINGFIELD\Eigene Dateien\timesheets\" 'dein Orderpfad
    Set Verz = FSO.GetFolder(Path)
    Set Dateien = Verz.Files
    For Each Datei In Dateien
    If FSO.GetExtensionname(objDatei) = "xls" Then
    Set wb1 = Workbooks.Open(Datei.Path) 'jetzt öffnet er eine Datei nach der anderen und bearbeitet sie
    PersNr = wb1.Sheets(1).Range("L1")
    Letzte1 = wb3.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

    For Counter2 = 5 To Letzte1
    If wb3.Sheets(1).Cells(Counter2, 1) = PersNr Then Lohn = wb3.Sheets(1).Cells(Counter2, 4)
    Next

    For Counter2 = 5 To Letzte2
    For Zeile1 = 8 To 37
    If wb1.Sheets(1).Cells(Zeile1, 2) = "" Then Exit For
    If wb1.Sheets(1).Cells(Zeile1, 2) = wb2.Sheets(1).Cells(Counter2, 1) Then
    wb2.Sheets(1).Cells(Counter2, 2).Value = Format(wb1.Sheets(1).Cells(Zeile1, "AO"), "##,#0.0")
    wb2.Sheets(1).Cells(Counter2, 3) = Format(wb1.Sheets(1).Cells(Zeile1, "AO") * Lohn, "##,##0.00") & "€"
    End If
    Next
    Next

    End If
    Next
    End Sub

    hät ich idiot eigentlich selber drauf kommen können....
    nur irgendwie wil das echt nicht so wie ich will... weil der Code liest nur ein und öffnet die Dateien genauso wie ich will, nur er tut weiter nichts, d.h. er gibt in mein wb2 nichts aus:(