MadmonkeyM Geschrieben 21. Januar 2010 Geschrieben 21. Januar 2010 Hallo zusammen, ich bin ein absoluter Neuling im bezug auf VBA und Excel. Ich hab für unsere Firma ein kleines "Rechnungsprogramm in VBA geschrieben was soweit auch ganz gut läuft. Leider hab ich erst zu spät gemerkt das das ganze Thema eher ein Fall für Access wäre. Naja zu spät. Nun stehe ich vor einem scheinbar unlösbaren Problem. Wir haben auf unserem Server einen Ordner angelegt in dem für jeden Monat ein Ordner ist. In diesen Ordner sind dann widerrum je nach Monat zwischen 20 und 30 Excel Dateien wo unsere Rechnungen gespeichert werden. Der Aufbau dieser Excel Dateien ist wie folgt. 1. Tabellenblatt ist eine Übersicht (TAbellenblattname "Übersicht") der geschriebenen Rechnungen aus diesem Monat, erste Zeile sind die Überschriften und dann von Zeile 2-40 die Daten der Rechnungen. Genutz werden hier die Spalten A-J. Diese Liste sieht in jeder Excel Datei gleich aus ! NAch diesem Tabellenblatt folgen die die REchnungsblätter. In Summe in jeder Datei 39 Rechnungen. Die Ordner in denen diese Dateien liegen sind alle gleich aufgebaut und heißen 01 Januar xxx-xxx, 02 Februar xxx-xxx wobei das xxx jeweils für die verwendeten Rechnungsnummer in diesem Monat steht. Nun aber zu eigentlichen Problem: Ich würde gerne eine Masterliste aus allen Rechnungen erstellen die auch immer wieder automatisch aktualisiert wird. D.h. eine Zusammenfassung aller Rechnungsübersichten der einzelnen Exceldateien. ISt sowas überhaupt möglich ? Wenn ja wie muss ich vorgehen ich kenn mich echt fast ned aus. Tut mir leid das ich euch so nen Text gepresst habe ich habe nur versucht alles so gut wie möglich zu beschreiben. Vielen Dank schon einmal für eure Hilfe Zitieren
MartinSt Geschrieben 21. Januar 2010 Geschrieben 21. Januar 2010 Hallo, ich denke mal lieber nicht über die Grundsätze ordnungsmäßiger Buchführung ? Wikipedia nach, sondern zu deinen Fragen: Ja, das ist möglich. Jedesmal wenn eine neue Rechnung wie auch immer entsteht und damit auch die Übersicht aktualisiert wird, wird auch ein passender Eintrag in der Masterliste gemacht. Gruß Martin Zitieren
Der Kleine Geschrieben 21. Januar 2010 Geschrieben 21. Januar 2010 Ja ist möglich - und bei identischen und berechenbaren Aufbau der Ordnerstruktur und der Exceldateien ziemlich kompliziert einfach. Die Masterliste holt sich auf Anfrage sämtliche in den Ordnern versteckte Informationen, so ist Code nur in der Masterliste, nicht in jede Exceldatei zu hinterlegen. Zu den GOB's : Diese machen nur dann sinn, wenn sie notwendig sind, also eine Buchführungspflicht besteht, was nicht immer gültig ist. Eine EÜR reicht unter bestimmten Umständen auch aus. Zitieren
MadmonkeyM Geschrieben 22. Januar 2010 Autor Geschrieben 22. Januar 2010 Hallo, erst mal danke für Eure Antworten. Könnt Ihr mir vielleicht einen Mustercode zukommen lassen ? Danke Zitieren
MartinSt Geschrieben 22. Januar 2010 Geschrieben 22. Januar 2010 @MadmonkeyM Was hast du denn bisher aufgrund der geposteten Ideen programmiert? Wobei hängt es dort konkret? Zitieren
MadmonkeyM Geschrieben 22. Januar 2010 Autor Geschrieben 22. Januar 2010 (bearbeitet) Hi also das folgende hatte ich mal aufm Desktop laufen da hat es auch funktioniert aber ich bekomm das jetzt mit der neuen Ordnerstruktur nicht mehr hin... Bitte nicht lachen ich hab echt null ahnung und hab mir das ganze erst mal irgendwie zusammengebaut Sub uebersicht() Dim datei As String, pfad As String, Zzeile As Long, i%, suche, AZelle As Range Dim quelle As Object pfad = Environ("HOMEPATH") & "Pfad" ' Serverpfad funktioniert nicht datei = Dir(pfad & "*.xls") Application.ScreenUpdating = False Zzeile = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 Do While Not datei = "" Set quelle = Workbooks.Open(pfad & datei) For i = 2 To 40 suche = quelle.Sheets(1).Cells(i, 1).Value With ThisWorkbook.Sheets(1).Columns(1) Set AZelle = .Find(suche, LookAt:=xlWhole, LookIn:=xlValues) If AZelle Is Nothing Then quelle.Sheets(1).Rows(i).Copy Destination:=.Cells(Zzeile, 1) Zzeile = Zzeile + 1 End If End With Next i quelle.Close datei = Dir DoEvents Loop Application.ScreenUpdating = True End Sub Danke erst mal <edit> Bitte Code-Tags verwenden, dann bleibt auch die Formatierung erhalten </edit> Bearbeitet 22. Januar 2010 von grueni Zitieren
MartinSt Geschrieben 22. Januar 2010 Geschrieben 22. Januar 2010 wie soll das ein Fremder machen, man kennt doch deine Dateinamen und Verz.struktur usw nicht? Zitieren
MadmonkeyM Geschrieben 22. Januar 2010 Autor Geschrieben 22. Januar 2010 Es geht nicht darum das ihr meine Verzeichnisstruktur kennen sollt sondern mir z.B. erklärt wie man auf einen Server bzw. einen Ordner von einem Server verweist. Dann weiß ich nicht ob das was ich bisher geschrieben habe überhaupt für sowas geeignet ist, geschweige denn ob es richtig ist. Ich hatte gehofft das es evtl Ergänzungen gibt. Vielen Dank all denen die mir zu helfen versuchen Zitieren
MartinSt Geschrieben 22. Januar 2010 Geschrieben 22. Januar 2010 und was funktioniert nicht? kommen Fehler? Zitieren
MadmonkeyM Geschrieben 25. Januar 2010 Autor Geschrieben 25. Januar 2010 In erster Linie hab ich erst mal n Problem den Pfad auf den Server zu legen ... Und dann ist da immer noch das Problem das Excel mit nicht die Ordner durchschaut und die Excel Dateien durchsucht, kopiert und einfügt. HAtte gedacht das der Pfad wie folgt ausschauen muss //Serverdaten/Rechnungen 2010/ die Ordner heißen dann wie folgt 01 Januar 2010 02 Febraur 2010 etc es wurde bei meinem Pfad den ich angewendet hatte nicht ausgeführt oder ich habe den Fehler "Ungültige ... " weiß die genaue Benennung nicht mehr. Zitieren
MadmonkeyM Geschrieben 25. Januar 2010 Autor Geschrieben 25. Januar 2010 Hoppala da war ich oben wohl etwas abwesend so sollte es eigentlich aussehen:D In erster Linie hab ich erst mal n Problem den Pfad auf den Server zu legen ... Und dann ist da immer noch das Problem das Excel mit nicht die Ordner durchschaut und die Excel Dateien durchsucht, kopiert und einfügt. HAtte gedacht das der Pfad wie folgt ausschauen muss \\Serverdaten\Rechnungen 2010\ die Ordner heißen dann wie folgt 01 Januar 2010 02 Febraur 2010 etc es wurde bei meinem Pfad den ich angewendet hatte nicht ausgeführt oder ich habe den Fehler "Ungültige ... " weiß die genaue Benennung nicht mehr. Zitieren
MadmonkeyM Geschrieben 25. Januar 2010 Autor Geschrieben 25. Januar 2010 So nachmal eine Ergänzung mit folgendem Pfad funktioniert es, aber leider nur wenn der Ordner bei mir aufm Desktopm liegt. pfad = Environ("HOMEPATH") & "\Desktop\Test\" hier sind die Dateien in einem Ordner und liegen im Ordner Test aufm Desktop So nun habe ich die Rechnungen aber auf Server liegen das müsste dann doch so aussehen : pfad = Environ("HOMEPATH") & "\\Serverdaten\Rechnungen 2010\ 01 Januar\" Das funktioniert schon mal nicht und außerdem hätte ich ja dann nur den Januar geöffnet und müsste den rest auch nochmal öffnen. Was gibt es hier für eine Möglichkeit ? Ich hänge nur noch an dem Pfad der Rest funktioniert Zitieren
MadmonkeyM Geschrieben 27. Januar 2010 Autor Geschrieben 27. Januar 2010 So hab jetzt selber eine Lösung gefunden. Der Code hier funktioniert: Sub uebersicht() Dim datei As String, pfad As String, Zzeile As Long, i%, suche, AZelle As Range Dim quelle As Object pfad = "\\Medico1\Serverdaten\Rechnungen 2010\01 Januar 0040-\" datei = Dir(pfad & "*.xls") Application.ScreenUpdating = False Zzeile = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 Do While Not datei = "" Set quelle = Workbooks.Open(pfad & datei) For i = 2 To 40 suche = quelle.Sheets(1).Cells(i, 1).Value With ThisWorkbook.Sheets(1).Columns(1) Set AZelle = .Find(suche, LookAt:=xlWhole, LookIn:=xlValues) If AZelle Is Nothing Then quelle.Sheets(1).Rows(i).Copy Destination:=.Cells(Zzeile, 1) Zzeile = Zzeile + 1 End If End With Next i quelle.Close datei = Dir DoEvents Loop Application.ScreenUpdating = True End Sub Und wenn man mehrere Ordner durchsuchen möchte dann muss man einfach nur nochmal einen teil des Codes anhängen. pfad = "\\Medico1\Serverdaten\Rechnungen 2010\Rechnungsblöcke\" datei = Dir(pfad & "*.xls") Application.ScreenUpdating = False Zzeile = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 Do While Not datei = "" Set quelle = Workbooks.Open(pfad & datei) For i = 2 To 40 suche = quelle.Sheets(1).Cells(i, 1).Value With ThisWorkbook.Sheets(1).Columns(1) Set AZelle = .Find(suche, LookAt:=xlWhole, LookIn:=xlValues) If AZelle Is Nothing Then quelle.Sheets(1).Rows(i).Copy Destination:=.Cells(Zzeile, 1) Zzeile = Zzeile + 1 End If End With Next i quelle.Close datei = Dir DoEvents Loop Application.ScreenUpdating = True ISt vielleicht nicht umbedingt die schönste Lösung aber sie funktioniert zumindest. Dank an alle die versucht haben mir zu helfen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.