der-herausforderer
Goto Top

Daten aus verschiedenen excel Dateien in ein neues Dokument kopieren und Sortieren

excelxp 02

Ich habe folgendes Problem und kann mit meinen Fähigkeiten keine Lösung finden.

Deshalb hoffe ich, dass es jemand anderes kann.

folgendes es gibt Projektkalkulationen gesamtzahl flexibel je nach Lage (nennen wir sie P-Kalkulationen) in der P-Kalkulatione sind alle kosten nach Budgetlinien/Kostenarten aufgelistet in einzelnen 9 tabellenblätter, um die Projekte jedoch untereinander vergleichbar zu machen ist es notwendig alle Projekte (bsp 7), das heisst es gibt auch 7 P-kalkulationen zusammenzufassen in der "P-Zusammenführung"

in der Zusammenführung gibt es 2 Blätter 1 Auflistung Projektname und Speicherort der Datei (=zelle....) und ein weiteres tabellenblatt in dem alle Kosten aus der P-Kalkulation übernommen, untereinander aufgelistet & nach Datum sortiert werden sollen.l

Das Problem liegt in der variablen Anzahl der P-Kalkulationen, den unterschiedlichen Speicherorten und der Bezeichnung der Datei.

Die zu kopierenden Daten befinden sich auf insgesamt 9 Blättern in der P-Kalkulation und sind in jeder P-Kalkulation in idetnischen Bereichen zu finden. Interessant sind 3 Spalten Parten, wann und total. alle daten auf den 9 Tebellenblättern befinden sich im Bereich B5:g104 die Spalten Partner und wann sind bei jedem Tabellenblatt in der P-kalkulation an der selben Stelle. Lediglich total ändert seine spalte zwischen e, f oder g


Meine Idee: Wenn in der ZUsammenführung eine neue P-Kalkulation eingetragen wird, könnte sich eine Abfrage zum Speicherort öffnen und nach Auswahl der Datei Die Kostenpositionen in die "tabelle 4" der P-Zusammenführung kopieren und sortieren. Zu beachten wäre dabei nur, dass alte Daten von P-Kalkulationen nicht überschrieben werden nur insofern der Eintrag/Verweis in der P-Zusammenführung entfernt wird, dass auch alle aufgelistetetn kosten des Projekts aus der tabelle 4 gelöscht werden.

leere zellen können in der p-Zusammenführung gelöscht werden.

Würde mich freuen, wenn irgendjemand mit nem makro bzw. vba Code oder irgendwas der gleichen mir helfen könnte.

Insofern jemand die zwei Dateien benötigt einfach an john.wes.777@gmail.com schreiben, schick sie dann umgehend rum.

und falls sich noch jemand für meine traurige Stelle interessiert, dann sind wohl alle Fragen damit beantwortet, dass ich ca. 10h/day sitze keinen Cent dafür bekomme und ich -Gott sei Dank - mein Studium bald fortsetzen kann.

Danke für alle Helfenden und Helfer.

grüße Thomas


Hallo herausfordernder john Thomas wes!

anbei p-Kalkulation = Kalkulation von projekte ungewisse Anzahl und
Benennung der Dateien, werden aber alle im selbern verzeichnis liegen

Damit würde sich die Kennzeichnung des einzelnen Projekts auf den Dateinamen (ohne Pfadangabe) reduzieren - richtig?

Nein, da die benamselung individuell vorgenommen wird, ein kriteritum ist jedoch dass alle (abhängig davon wie viele projekte stattefinden, bsp: bei 7 Projekten muss es auch p-kalkulationen geben, jedoch ist der dateiname variabel) In dem EINEN jeweiligen Verzeichnis liegen sollen & es werden nur P-Kaluationen sein(jedoch wie bereits erwähnt mit unterschiedlichen Dateibezeichnungen)

Gibt es für die Unterscheidung zwischen Projektdateien und anderen Excel-Dateien des Verzeichnisses (wie etwa "P-Zusammenfassung.xls") ein brauchbares Kriterium im Dateinamen (etwa: Nur Projektdateien sollen das Präfix "P-" aufweisen.), damit eine automatische Verarbeitung stattfinden kann, oder soll gelten: Nur explizit "angeforderte" Projektdateien (etwa über ein Eingabefenster) sollen in die Zusammenfassung übernommen werden?

Die Idee mit dem Präfix ist gut - einfach, leicht umzusetzen.
Generell obliegt es völlig deiner kreativität wie die "Dinger" (P-Kalkulationen heissen können)
Eingabefenster wäre ein krasser Luxus, würde aber auch gleichzeitig die fehlerquote steigern deshalb finde ich deine Idee mit dem Präfix einfach spitze
Desweiteren liegen die Dateien ja alle im selben Ordner

p-Zusammenfassung = auf tabelle 4 Sollen alle kosten der Tabellenblätter
Personal bis Evaluation untereinander zusammengefasst werden
relevant sind die Informationen
"Partner"
"Wann"
"total"

Anmerkung: Die Tabellen "Untervertrag" und "Evaluation" haben keine Spalte "Total" oä

mein fehler, war ursprünglich nur weil total sich sonst immer durch multiplikation ergab, dort jedoch unnötig ist, da der benutzer die Kosten selber eingibt und sich diese nicht berechnen.
Können wir aber gern umbenennen um den Vorgang zu erleichtern ist kein problem.


"Alle Kosten" ist gleichzusetzen mit "alle Einträge der 9 Tabellen in den genannten 3 Spalten"?

Ja, Richtig! face-smile


Wenn ja, ist die Kennzeichnung der Kostenposition - zB "A/I 1" bis "A/I 100" in der Tabelle "Ausrüstung" - ebenfalls zu übernehmen?

Stimmt wäre logisch, hast recht! so lassen sich die Kosten im nachhinein noch den kostenarten zuordnen.

Wenn die einzelnen Kosten den Projekten zuordenbar bleiben sollen (um sie zB, wie angesprochen, wieder löschen zu können), sollte dann zB in einer weiteren Spalte der Dateiname der Projektdatei in jeder Zeile erfasst werden?

Ich kann wieder nur sagen gute Idee daran habe ich noch nicht gedacht ja natürlich ist die kennzeichnung auch notwendig.

Deine Antworten würde ich als Boardmail im Forum bevorzugen - ob und was von den (hoffentlich) entstehenden Ergebnissen Eingang ins Forum finden soll/wird, können wir später noch überlegen.

Grüße
bastla

Danke Dir bastla allein für die guten fragen und die kritische prüfung.
Hohe Anerknnung

Grüße
task thomas wes face-smile

Content-Key: 56955

Url: https://administrator.de/contentid/56955

Printed on: April 25, 2024 at 14:04 o'clock

Member: bastla
bastla Apr 18, 2007 at 18:15:09 (UTC)
Goto Top
Hallo Thomas!

Hier im Forum weiterzumachen finde ich ohnehin besser ...

Nochmals als Kurzzusammenfassung:
Ein Ordner enthält (wird enthalten) Projektdateien mit gleichbleibender Struktur (Name, Anzahl und Inhalt der Tabellen). Aus insgesamt 9 der in den Dateien enthaltenen Tabellen sollen jeweils 100 verschiedene Kostenarten in "Tabelle4" der Exceldatei "Zusammenstellung" so zusammengefasst werden, dass neben den Feldern "Kostenart", "Partner", "Wann" und "Total" auch die Herkunft der Kosten (das Projekt) ersichtlich ist.
Meine Frage nach dem "Eingabefenster" bezog sich auf Deine oben dargestellte Idee
Wenn in der ZUsammenführung eine neue P-Kalkulation eingetragen wird, könnte sich eine Abfrage zum Speicherort öffnen und nach Auswahl der Datei Die Kostenpositionen in die "tabelle 4" der P-Zusammenführung kopieren und sortieren.

Daraus resultierend ist für mich weiterhin ist die Frage offen, ob die Lösung in der Hinsicht dynamisch sein soll, dass die bereits vorhandenen Zusammenfassungs-Daten beim Hinzufügen neuer Projekte tatsächlich zu ergänzen wären, oder ob zum gewünschten Stichtag die Zusammenfassung aus den dann aktuell im Verzeichnis liegenden Projektdateien neu erstellt werden sollte - damit entfiele auch das angedachte Löschen auszuscheidender Projekte.

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer Apr 18, 2007 at 18:42:08 (UTC)
Goto Top
1. die bereits vorhandenen Zusammenfassungs-Daten beim Hinzufügen neuer Projekte tatsächlich zu ergänzen wären?
oder
2. ob zum gewünschten Stichtag die Zusammenfassung aus den dann aktuell im Verzeichnis liegenden Projektdateien neu erstellt werden sollte - damit entfiele auch das angedachte Löschen auszuscheidender Projekte.

mal wieder habe ich mir darüber noch keine Gedanken gemacht
letztlich werde ich die datei die wir entwickeln noch koppeln mit 2 weiteren extrahierten Daten jeweils aus nem Finanzbuchahltungaprogramm und ner ressourcenplanung.

Um den Ist zustand zu erfassen, um es als Controlling instruiment nutzen zu können.
Kommt eigentlich nur variante 2 in Frage!

Grüße Thomas
Member: Der-Herausforderer
Der-Herausforderer Apr 19, 2007 at 07:28:49 (UTC)
Goto Top
Mir kam grad noch nhe Idee
insofern es leichter in der Umsetzung ist könnte man ja auch die P-Kalkulationen in der Dateibezeichnung identisch halten und sie nur in unterschiedliche Unterordner packen, insofern es leichter in der Umsetzung ist...

was meinst du logischer, leichter umzusetzen oder bleiben wir lieber beim identischen Pfad und unterschiedlicher Dateibezeichnung?

Grüße aus Berlin
Member: bastla
bastla Apr 19, 2007 at 12:29:03 (UTC)
Goto Top
Hallo Thomas!

... bleiben wir lieber beim identischen Pfad und unterschiedlicher Dateibezeichnung?
Insbesondere, wenn sichergestellt ist, dass nur Projektdateien im entsprechenden Ordner liegen, ist das OK.
Leider bin ich momentan zeitlich etwas knapp, daher wird's ein wenig dauern - in der Zwischenzeit noch einige Fragen:

  • Sollen eigentlich alle Kostenarten übernommen werden, oder nur jene, bei denen ein Wert <> 0 in "Total" aufscheint?

  • Kann davon ausgegangen werden, dass die Tabellenstruktur unverändert bleibt (sodass also beispielsweise immer aus der Tabelle "Ausrüstung" die Spalten A, C, D und G übernommen werden), oder sollte die Auswahl der Spalten anhand der Überschriften in Zeile 3 erfolgen (etwa: Für "Total" wird die erste Spalte, deren Zelle in Zeile 3 den Text "total" groß oder klein geschrieben enthält, verwendet.)?

  • Bleibt es dabei, dass der Dateiname als "Schlüsselbegriff" für das Projekt verwendet wird (da eben aus meiner Sicht keine Notwendigkeit zur Verlagerung in einzelne Verzeichnisse besteht, müssen die Namen ohnehin unterschiedlich sein)?

  • Wie wird die Tabelle "Projektübersicht" verwendet/verwaltet?

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer Apr 19, 2007 at 13:50:05 (UTC)
Goto Top
Sollen eigentlich alle Kostenarten übernommen werden, oder nur jene, bei denen ein Wert <> 0 in "Total" aufscheint?

Grundsätzlich bräuchte man nur Zeilen mit eingetragenen Werten. Da man sie dannach aber sowieso sortiert nach Datum, Projekt, und Kostenart (In der Reihenfolge)´können/werden jene leere zellen gelöscht werden

Kann davon ausgegangen werden, dass die Tabellenstruktur unverändert bleibt (sodass also beispielsweise immer aus der Tabelle "Ausrüstung" die Spalten A, C, D und G übernommen werden), oder sollte die Auswahl der Spalten anhand der Überschriften in Zeile 3 erfolgen (etwa: Für "Total" wird die erste Spalte, deren Zelle in Zeile 3 den Text "total" groß oder klein geschrieben enthält, verwendet.)?

Ja die tabellenstruktur darf/wird sich nicht verändern. also ist ne simple übernahme entweder der gesamten Spalte/ des range gegeben

Bleibt es dabei, dass der Dateiname als "Schlüsselbegriff" für das Projekt verwendet wird (da eben aus meiner Sicht keine Notwendigkeit zur Verlagerung in einzelne Verzeichnisse besteht, müssen die Namen ohnehin unterschiedlich sein)?
Ja das denke ich auch. Dateiname = Schlüsselbegriff

Wie wird die Tabelle "Projektübersicht" verwendet/verwaltet?
Die Tabelle Projektübersicht dient dazu einen kurzen Überblick über alle Projekte zu bekommen und weist die Kosten und Erträge per Verweise zu den einzelnen P-kalkulationen aus. Dabei muss der Benutzer insofern er eine neue P-Kalkulation anlegt, die Verweise aus der P-kalkulation, tabellenblatt "allgemeine Infos" in die P-Zusammenfassung, Tabellenblatt Projektübersicht eintragen.

Die Spalte Verzeichnis hatte ursprünglich 2 Funktioen:
1. Info wo liegt die entsprechende Kalk.
2. (Trifft nicht mehr zu) sollte für ein marko herhalten, der den Verweis aufgreift und die Tabellenblätter aus dem Ziel des Verzeichnisses kopiert. Hat ja leider nicht geklappt liegt aber wahrscheinlich eher an meinen Fähigkeiten.... face-sad

Dannach sollte er den VBA Code manuell (Button/Shortkey) ausführen / ALternativ: wahrscheinlich sogar besser, immer beim Aufrufen und Kosten aller P-Kalk... (langsam bin ich selber angenervt von der Bezeichnung ;) ) aus dem festgelegten verzeichnis aktualisieren.

Ahhhhh mir dämmerts jetzt weiss ich glaub ich auch worauf die hinaus willst in bezug auf die Dateibezeichnung der P-K..... und der tabelle Projektübersicht...
Eine möglichkeit vielleicht aogar leicht für die Umsetzung. Das Kürzel des Projekts aus der Tabelle "Projektübersicht" benutzen um so die einzelnen P-K.... zu benennen und den vba Code so anlegen, dass er alle excel Dateien mit den Namen aus der Spalte Kürzel in folgendem/folgenden verzeichnissen sucht, öffnet, kopiert, in Tabelle 4 (Kostenübersicht) einfügt, sortiert, leere Zeilen löscht.

bastla ich weiss nicht ob dein plan war mich darauf zu bringen oder....

Aber echt toll, wenn du mal in berlin bist lad ich Dich gern auf ein Bier ..... oder was auch immer ein!


Viele Grüße Thomas
Member: Der-Herausforderer
Der-Herausforderer Apr 25, 2007 at 08:21:28 (UTC)
Goto Top
Holá bastla,

ich hoffe du lebst noch und es geht Dir gut.

Kannst Dich ja nur mal kruz melden, insofern du Zeit hast.

Grüße thomas
Member: bastla
bastla Apr 25, 2007 at 13:23:00 (UTC)
Goto Top
Hallo Thomas!

Sorry, dass ich Deine Geduld so strapazieren muss, aber zwischenzeitlich halten mich auch noch gesundheitliche Gründe vom Arbeiten ab, wobei ich auf dem Weg der Besserung aber schon ein schönes Stück vorangekommen bin ...

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer Apr 25, 2007 at 13:50:44 (UTC)
Goto Top
ja hoppala, dann Dir erstmal gute Besserung.

ist nicht (so) wild hat auch Zeit bastel grad noch an ner anderen Sache.

Also lass es Dir gut gehen und gute Besserung.

Viele Grüße thomas
Member: bastla
bastla Apr 27, 2007 at 17:01:56 (UTC)
Goto Top
Hallo Thomas!

Als erstes Zwischenergebnis könnte ich Dir folgendes anbieten:
Option Explicit

Const TabAnzahl As Integer = 9
Const BerAnzahl As Integer = 4
Const ZeilAnzahl As Integer = 100
Const ZusTab As String = "Tabelle4"  

Dim Tabelle(TabAnzahl) As String
Dim Bereich(TabAnzahl, BerAnzahl) As String
Dim wbZ As Workbook, wsAuflist As Worksheet
Dim Zeile As Integer, Spalte As Integer

Sub Init()
Set wbZ = ActiveWorkbook
Set wsAuflist = wbZ.Worksheets(ZusTab)
'erste freie Zeile der Auflistung suchen  
Zeile = 2
Do While wsAuflist.Cells(Zeile, 1) <> ""  
    Zeile = Zeile + 1
Loop
'Datenstruktur Kalkulationsdatei  
Tabelle(1) = "Personal"  
    Bereich(1, 1) = "A5:A104" 'Kostenart  
    Bereich(1, 2) = "C5:C104" 'Wann  
    Bereich(1, 3) = "D5:D104" 'Partner  
    Bereich(1, 4) = "G5:G104" 'Total  
Tabelle(2) = "Reise"  
    Bereich(2, 1) = "A5:A104" 'Kostenart  
    Bereich(2, 2) = "C5:C104" 'Wann  
    Bereich(2, 3) = "D5:D104" 'Partner  
    Bereich(2, 4) = "I5:I104" 'Total  
Tabelle(3) = "Aufenthalt"  
    Bereich(3, 1) = "A5:A104" 'Kostenart  
    Bereich(3, 2) = "C5:C104" 'Wann  
    Bereich(3, 3) = "D5:D104" 'Partner  
    Bereich(3, 4) = "G5:G104" 'Total  
Tabelle(4) = "Produktion"  
    Bereich(4, 1) = "A5:A104" 'Kostenart  
    Bereich(4, 2) = "C5:C104" 'Wann  
    Bereich(4, 3) = "D5:D104" 'Partner  
    Bereich(4, 4) = "G5:G104" 'Total  
Tabelle(5) = "Veranstaltung"  
    Bereich(5, 1) = "A5:A104" 'Kostenart  
    Bereich(5, 2) = "C5:C104" 'Wann  
    Bereich(5, 3) = "D5:D104" 'Partner  
    Bereich(5, 4) = "G5:G104" 'Total  
Tabelle(6) = "Ausrüstung"  
    Bereich(6, 1) = "A5:A104" 'Kostenart  
    Bereich(6, 2) = "C5:C104" 'Wann  
    Bereich(6, 3) = "D5:D104" 'Partner  
    Bereich(6, 4) = "G5:G104" 'Total  
Tabelle(7) = "Untervertrag"  
    Bereich(7, 1) = "A5:A104" 'Kostenart  
    Bereich(7, 2) = "C5:C104" 'Wann  
    Bereich(7, 3) = "D5:D104" 'Partner  
    Bereich(7, 4) = "E5:E104" 'Total  
Tabelle(8) = "Sonstiges"  
    Bereich(8, 1) = "A5:A104" 'Kostenart  
    Bereich(8, 2) = "C5:C104" 'Wann  
    Bereich(8, 3) = "D5:D104" 'Partner  
    Bereich(8, 4) = "G5:G104" 'Total  
Tabelle(9) = "Evaluation"  
    Bereich(9, 1) = "A5:A104" 'Kostenart  
    Bereich(9, 2) = "C5:C104" 'Wann  
    Bereich(9, 3) = "D5:D104" 'Partner  
    Bereich(9, 4) = "E5:E104" 'Total  
End Sub

Sub HoleAusMappe(Mappe As String) 'ev auch Kennung übergeben  
Dim fso As Object, wbKalk As Workbook, Kennung As String
Dim i As Integer, j As Integer
Set fso = CreateObject("Scripting.FileSystemObject")  
If Not fso.FileExists(Mappe) Then
    MsgBox "Datei " & Mappe & " konnte nicht gefunden werden!"  
Else
    Init
    Kennung = Mid(Mappe, InStrRev(Mappe, "\") + 1) 'Dateinamen isolieren  
    Kennung = Left(Kennung, InStrRev(Kennung, ".") - 1) 'Dateityp entfernen  
    Workbooks.Open Mappe
    Set wbKalk = ActiveWorkbook
    'Alle Tabellen einlesen  
    For i = 1 To TabAnzahl
        Spalte = 1
        For j = 1 To BerAnzahl
            wbKalk.Worksheets(Tabelle(i)).Range(Bereich(i, j)).Copy
            wbZ.Activate
            wsAuflist.Activate
            Cells(Zeile, Spalte).Select
            Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
            Spalte = Spalte + 1
        Next 'j  
        'Kennung eintragen  
        For j = 0 To ZeilAnzahl - 1
            Cells(Zeile + j, Spalte) = Kennung
        Next 'j  
    Zeile = Zeile + ZeilAnzahl
    Next 'i  
    Cells(Zeile, 1).Select
    wbKalk.Saved = True
    wbKalk.Close
End If
End Sub

Sub Test()
HoleAusMappe ("D:\Test\P-Kalkulation.xls")  
End Sub
Speichere den Code in einem Modul der Zusammenfassungsdatei und starte nach den erforderlichen Anpassungen (siehe unten) das Makro "Test".

Kurze Erläuterungen:
Im ersten Teil werden einige Konstante (bitte überprüfen) und globale Variable festgelegt (inbes für die Auslagerung der "Init"-Routine).

Im Sub "Init" werden die aktuelle Datei sowie die Zieltabelle zwischengespeichert und es wird die nächste freie Zeile der Zieltabelle (basierend auf der ersten leeren Zelle der Spalte A) gesucht - Einträge sind in meiner Testversion ab Zeile 2 möglich, Du kannst diese Startzeile aber natürlich anpassen.

Die Routine "HoleAusMappe" erwartet die Übergabe einer Exceldatei mit vollständiger Pfadangabe (das erledigt dann für die Tests das Sub "Test"). Errorhandling (mit Ausnahme der Existenzprüfung für den übergebenen Dateinamen) findet derzeit noch nicht statt.

Für das Testen ermittle ich als "Kennung" des Projekts einfach den Dateinamen (ohne Pfad und ".xls").

Alle (derzeit 9 - siehe Konstante oben) Tabellen werden anhand ihres Namens in der Kalkulationsdatei aufgesucht und die im "Init"-Teil festgelegten (4 - siehe ebenfalls Konstante ) Bereiche in die entsprechenden Spalten der Zusammenfassungstabelle kopiert. In eine fünfte Spalte wird zusätzlich jeweils die Kennung eingetragen.

Nach dem Durchlaufen aller Tabellen wird die Kalkulationsdatei wieder geschlossen. An dieser Stelle hätte ich ein automatisches Speichern der Zusammenfassungsdatei vorgesehen, aber während der Testphase noch nicht implementiert.

Das "HoleAusMappe"-Unterprogramm soll in weiterer Folge für alle (woher auch die Informationen darüber stammen werden) Projektkalkulationsdateien verwendet werden. Für den Moment teste ich nur mit der (einen) im Sub "Test" eingetragenen Datei, was Du bitte auch tun mögest ...
Übrigens: Die Kostenarten für "Personal" und "Produktion" haben in der mir vorliegenden Fassung der Kalkulationsdatei noch jeweils die gleiche Abkürzung, und '"Ausrüstung" und "Sonstiges" detto ...

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer Apr 27, 2007 at 17:31:46 (UTC)
Goto Top
uffffffffff hab ja gedacht dass der Quellcode etwas länger wird, aber jetzt bin ich echt platt.

Mein Gott, (oder bastla) was bleibt mir anderes als zu sagen DANKE DANKE DANKE.

Werd den Code so shenll wie möglich einfügen und Dir nen feedback geben, stehe aber gerade familär " etwas unter Druck" (leichte Untertreibung), deshalb wird es sich noch einwenig verzögern.

einfach nur DANKE.

viele viele Grüße Thomas
Member: bastla
bastla Apr 27, 2007 at 17:37:00 (UTC)
Goto Top
Hallo Thomas!

Bitte keine unproduktive Eile ... face-wink

Der Code ist gar nicht so lang, ich habe nur versucht, ihn etwas allgemeiner (und damit flexibler) anzulegen - und ein Großteil besteht ja nur aus der Definition der Tabellen(bereiche).

Andererseits: There's more to come - allerdings erst nach entsprechender Erörterung ...

Grüße
bastla
Member: bastla
bastla Apr 28, 2007 at 16:57:47 (UTC)
Goto Top
Hallo Thomas!

Vorweg noch eine zweite Testvariante (der ich persönlich eigentlich mehr abgewinnen kann) - hier werden nur Kostenarten übernommen, für die in zumindest einer der Spalten "Wann" und "Partner" ein Inhalt steht oder für die der Betrag von "Total" nicht 0 ist:
Option Explicit

Const TabAnzahl As Integer = 9 'Anzahl der zu übernehmenden Tabellen in der Quelldatei  
Const BerAnzahl As Integer = 4 'Anzahl der zu übernehmenden Spalten in der Quelltabelle  
Const ZusTab As String = "Tabelle4" 'Name der Zieltabelle  
Const StartSpalte As Integer = 1 'erste Datenspalte der Zieltabelle  

Dim Tabelle(TabAnzahl) As String
Dim Bereich(TabAnzahl, BerAnzahl) As String
Dim wbZ As Workbook, wsAuflist As Worksheet
Dim Zeile As Integer, Spalte As Integer

Sub Init()
Set wbZ = ActiveWorkbook
Set wsAuflist = wbZ.Worksheets(ZusTab)
'erste freie Zeile der Auflistung suchen  
Zeile = 2
Do While wsAuflist.Cells(Zeile, 1) <> ""  
    Zeile = Zeile + 1
Loop
'Datenstruktur Kalkulationsdatei  
'Spalte für "Total" als Letzte angeben!  
Tabelle(1) = "Personal"  
    Bereich(1, 0) = "5" 'erste Datenzeile  
    Bereich(1, 1) = "A" 'Kostenart  
    Bereich(1, 2) = "C" 'Wann  
    Bereich(1, 3) = "D" 'Partner  
    Bereich(1, 4) = "G" 'Total  
Tabelle(2) = "Reise"  
    Bereich(2, 0) = "5" 'erste Datenzeile  
    Bereich(2, 1) = "A" 'Kostenart  
    Bereich(2, 2) = "C" 'Wann  
    Bereich(2, 3) = "D" 'Partner  
    Bereich(2, 4) = "I" 'Total  
Tabelle(3) = "Aufenthalt"  
    Bereich(3, 0) = "5" 'erste Datenzeile  
    Bereich(3, 1) = "A" 'Kostenart  
    Bereich(3, 2) = "C" 'Wann  
    Bereich(3, 3) = "D" 'Partner  
    Bereich(3, 4) = "G" 'Total  
Tabelle(4) = "Produktion"  
    Bereich(4, 0) = "5" 'erste Datenzeile  
    Bereich(4, 1) = "A" 'Kostenart  
    Bereich(4, 2) = "C" 'Wann  
    Bereich(4, 3) = "D" 'Partner  
    Bereich(4, 4) = "G" 'Total  
Tabelle(5) = "Veranstaltung"  
    Bereich(5, 0) = "5" 'erste Datenzeile  
    Bereich(5, 1) = "A" 'Kostenart  
    Bereich(5, 2) = "C" 'Wann  
    Bereich(5, 3) = "D" 'Partner  
    Bereich(5, 4) = "G" 'Total  
Tabelle(6) = "Ausrüstung"  
    Bereich(6, 0) = "5" 'erste Datenzeile  
    Bereich(6, 1) = "A" 'Kostenart  
    Bereich(6, 2) = "C" 'Wann  
    Bereich(6, 3) = "D" 'Partner  
    Bereich(6, 4) = "G" 'Total  
Tabelle(7) = "Untervertrag"  
    Bereich(7, 0) = "5" 'erste Datenzeile  
    Bereich(7, 1) = "A" 'Kostenart  
    Bereich(7, 2) = "C" 'Wann  
    Bereich(7, 3) = "D" 'Partner  
    Bereich(7, 4) = "E" 'Total  
Tabelle(8) = "Sonstiges"  
    Bereich(8, 0) = "5" 'erste Datenzeile  
    Bereich(8, 1) = "A" 'Kostenart  
    Bereich(8, 2) = "C" 'Wann  
    Bereich(8, 3) = "D" 'Partner  
    Bereich(8, 4) = "G" 'Total  
Tabelle(9) = "Evaluation"  
    Bereich(9, 0) = "5" 'erste Datenzeile  
    Bereich(9, 1) = "A" 'Kostenart  
    Bereich(9, 2) = "C" 'Wann  
    Bereich(9, 3) = "D" 'Partner  
    Bereich(9, 4) = "E" 'Total  
End Sub

Sub HoleAusMappe(Mappe As String) 'ev auch Kennung übergeben  
Dim fso As Object, wbKalk As Workbook, Kennung As String
Dim i As Integer, j As Integer
Dim QZeile As Integer, Uebertragen As Boolean
Set fso = CreateObject("Scripting.FileSystemObject")  
If Not fso.FileExists(Mappe) Then
    MsgBox "Datei " & Mappe & " konnte nicht gefunden werden!"  
Else
    Init
    Kennung = Mid(Mappe, InStrRev(Mappe, "\") + 1) 'Dateinamen isolieren  
    Kennung = Left(Kennung, InStrRev(Kennung, ".") - 1) 'Dateityp entfernen  
    Workbooks.Open Mappe 'ev mit fixem Pfad  
    Set wbKalk = ActiveWorkbook
    wbZ.Activate
    wsAuflist.Activate
    'Alle Tabellen einlesen  
    For i = 1 To TabAnzahl
        QZeile = CInt(Bereich(i, 0))
        Do While wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, 1)).Value <> ""  
            'Sind für diese Kostenart Werte zu übertragen?  
            Uebertragen = False
            For j = 2 To BerAnzahl - 1 'außer für "Total" auf "leer" überprüfen  
                'Ein einziger Eintrag genügt ...  
                If wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).Value <> "" Then  
                    Uebertragen = True
                    Exit For
                End If
            Next 'j  
            'Total überprüfen  
            If wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).Value <> 0 Then Uebertragen = True
            If Uebertragen Then
                'Kostenart übertragen  
                Spalte = StartSpalte
                For j = 1 To BerAnzahl
                    Cells(Zeile, Spalte).Value = _
                        wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).Value
                    Cells(Zeile, Spalte).NumberFormat = _
                        wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).NumberFormat
                    Spalte = Spalte + 1
                Next 'j  
                'Kennung eintragen  
                Cells(Zeile, Spalte) = Kennung
                Zeile = Zeile + 1
            End If
            QZeile = QZeile + 1
        Loop
    Next 'i  
    Cells(Zeile, 1).Select
    wbKalk.Saved = True
    wbKalk.Close
End If
End Sub

Sub Test()
HoleAusMappe ("D:\Test\P-Kalkulation.xls")  
End Sub
Im Prinzip gilt das bei der oberen Variante Gesagte: In ein Modul kopieren, Pfad im "Test"-Makro anpassen und dieses starten.

Die Bereiche sind nur noch mit Spaltenbuchstaben bzw der ersten Datenzeile vorgegeben - von dieser Zeile ausgehend werden alle Zeilen mit einer eingetragenen Kostenart bis zur ersten leeren Zelle in der Kostenarten-Spalte der jeweiligen Kalkulationstabelle berücksichtigt.

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer May 02, 2007 at 12:04:43 (UTC)
Goto Top
wow wow we wa wa

hab alles soweit eingefügt und boah klappt bestens.

ah mensch ich werd jetzt noch einfügen dass alle Daten aus einer Quelle eingelesen werden, aber an sonsten... nur SPITZE

In welche Richtungen willst kann man es denn noch weiter entwickeln? Bzw. an was hast du gedacht?

Viele Grüße und einfach nochmal Danke für deine tatkräftige Unterstützung. Ohne Dich würde ich das in nem Jahr nicht schaffen!!!!!

Thomas
Member: bastla
bastla May 02, 2007 at 16:36:00 (UTC)
Goto Top
Hallo Thomas!

... ich werd jetzt noch einfügen dass alle Daten aus einer Quelle eingelesen werden ...
Das war der Kernpunkt der ausstehenden "Erweiterungen" - die eigentliche Steuerung des Einlesens.
Zuletzt gingen ja die Überlegungen in Richtung "Übernahme aus der Projektübersichts-Tabelle" (auch die "Projekt-Kennung" könnte dann von dort ausgelesen und nicht - so wie derzeit - aus dem Dateinamen abgeleitet werden), aber es wäre natürlich auch möglich, die Dateinamen aus dem "Inhaltsverzeichnis" des Datenordners zu beziehen und einfach "alle Vorhandenen" zu übernehmen. Besonders in letzterem Falle müsste daran gedacht werden, "Doppelgleisigkeiten" zu vermeiden, indem etwa vor der Übernahme einfach alle Datenzeilen aus der "Tabelle4" (dafür findest Du sicher noch einen aussagekräftigeren Namen face-wink) gelöscht werden.
Außerdem hattest Du daran gedacht, eine Sortierung der übernommenen Daten durchzuführen (vor allem bei der Variante 1, also der Komplettübernahme aller 800+ Kostenarten, sicherlich ein Thema).

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer May 03, 2007 at 10:25:18 (UTC)
Goto Top
Hey bastla,

jup die Übernahme aller Daten ist sicherlich nochmal eine "Herausforderung" face-smile
was würdest du denn sagen: (?)
alle Daten werden ca. monatlich ausgelesen dazu werden die Bereiche (A2:E2) aus der Tabelle 4 (jetzt Projektkosten) vorab gelöscht um alte Daten nicht mit in die neue Auswertung einzubeziehen.
Anschließend dein ((grandioses)) Makro ausgeführt.
und anschließend werden die Bereiche sortiert.

Fehler können sicherlich vermieden werden, wenn alle Daten aus einer Quelle ausgelesen werden. Sollte es vorkommen, dass ein Benutzer "vergisst" das "Inhaltsverzeichnis" auf dem laufenden Stand zu halten.

Andererseits werden so auch nicht aktualisierte Projekte (bzw. nicht gelöschte/alte Dateien) mit einbezogen.

Ich favorisiere das einlesen aus einem bestimmten Pfad. Also die jetzige Variante!
Kritiken oder ANregungen sind gern willkommen!! face-smile

Auch wenn das dazu führt dass das Inhaltsverzeichnis nicht auf dem laufenden ist.

Geistesblitz: eine ABfrage einbauen: wenn Datei im Pfad vorhanden und der Dateiname mit dem Kürzel aus dem Inhaltsverzeichnis übereinstimmt, dann lese und kopiere die Daten aus dem Pfad.

2. Punkt: Die Sortierung

Sortierung habe ich mir gedacht: würde ich über den Makrorecorder aufzeichnen und anshcließend einfügen. 1. Versuch schlug fehl, da ich nicht genau wußte an welche Stelle der Quellcode einzufügen ist. mhm face-sad

HAB MICH AUCH DURCH DEIN qUELLCODE GEARBEITET und ich mache fortschritte. Durch deine Erläuterung wird echt alles glasklar. Doch erste Versuche, selber was zu "programmieren" schlugen jämmerlich fehl. face-sad

Viele Grüße
thomas
Member: Der-Herausforderer
Der-Herausforderer May 03, 2007 at 14:05:38 (UTC)
Goto Top
Wenn ich genauer drüber nachdenk ist die eigentliche Funktion des Inhaltsverzeichnis inzwischen nahezu hinfällig.

Eigentlich könnten wir die Tabelle löschen und alles über den Pfad einlesen.

GRüße Thomas
Member: Der-Herausforderer
Der-Herausforderer May 04, 2007 at 07:46:34 (UTC)
Goto Top
Heeeeeeeeeeeeeeeey bastla, face-smile

hossa hoffe es geht Dir gut, so dass der Sommer kommen kann.

-->
Hab mir nochmal gedanken gemacht und -->
Auch die Sortierung ist inzwischen unnöttig, da ich dies mit ner Summenproduktformel mit 3 Bedingungen umgehen konnte. Diese Auswertung ist/wär später sowieso von Nöten, da kann man das auch alles in einem Abwasch erledigen lassen. ("dachte ich mir")


Somit ist quasi nur noch das einlesen aus einem Pfad relevant.

Viele Grüße Thomas
Member: bastla
bastla May 04, 2007 at 12:40:49 (UTC)
Goto Top
Hallo Thomas!

Na dann machen wir aus dem "Sub Test" einfach so etwas:
Sub StarteZusammenfassung()
Const sSourcePath As String = "D:\Daten"  
Dim fso as Object, oFile as Object
Set fso = CreateObject("Scripting.FileSystemObject")  
'  
'Hier vorweg die Tabelle "Projektkosten" löschen  
'  
For Each oFile In fso.GetFolder(sSourcePath).Files
    If LCase(Right(oFile.Name, 4)) = ".xls" Then 'nur Excel-Mappen bearbeiten  
        HoleAusMappe(oFile.Path)
    End If
Next
End Sub
Optimierungen (wie etwa nur einmaliges Zuweisen der Tabellenbeschreibungen) können wir ja im Fall des Falles noch nachziehen ...

Grüße
bastla

P.S.: Danke für die guten Wünsche, aber mein Gesundheitszustand könnte noch etwas besser sein ...
Member: Der-Herausforderer
Der-Herausforderer May 07, 2007 at 10:58:21 (UTC)
Goto Top
Hallo bastla,

nur einmaliges zuweisen der Tabellenbeschreibung ist unnötig habe das bereits über excel Formeln gelöst. Also echt alles SUPI face-smile Juchuu

Inzwischen habe ich es auch "geschafft" für meine Fähigkeiten schon super, dass die Projektübersciht inzwischen unntöig ist und Spaltenüberschriften aus den tabellenbeschreibungen übernommen werden.

1 Frage njoch:
was meinst du mit dem Kommentar: "'Hier vorweg die Tabelle "Projektkosten" löschen"

Falls du die "alten Daten in der tabelle Projektkosten aus einer vorherigen Abfrage durch das Makro löschern möchtest, dann *stolz auf mich* habe ich schon zum beginn des Makro init eingefügt, dass er den Range mit "" quasi leeren/löschen soll.


So dann füg ich mal ein und checke mal wie es klappt. Inzwischen ist die gesamte Datei so aufgeladen, mit echt zich Formeln wie Summenprodukt mit 3 Bedingungen etc, dass die Berechnung (trotz 1024 RAM) an die 3 Min dauert.


Also ich gebe Dir nen feedback insofern ich ein Ergebnis des ersten testlauf mit dem Pfadeinlesen habe.

Ich kann nur nochmal DANKE sagen, ansonsten Dir gute Besserung und viele Grüße.

Hoffe deine Krankheit hat nichts mit nem Unfall oder so zu tun.

Kurze geschichte nebenbei, war am WE Motorradfahren, es war Samstag ich musste mal runterkommen von der Arbeit, das Wetter war schön, also auf den Bock geschwungen und los gings. Hab dann wirklich die schönste Strecke im berliner Umland gefunden, nach gut 150 km fand ich ein Schiffshebewerk (Fahrstuhl für Schiffe um Höhenunterschiede zu überwinden ca 30m hoch) mach ne kleine Pause wollte eigentlich wieder zurück fahren, entscheid mich um und wollte noch ein paar kilometer abspulen mit dem Satz: "Weiter mit der wilden Fahrt" face-smile

Resultat 2 km weiter steh ich am Straßenrand, gestoppt von ner Polizeikontrolle, mit 35 km/h zuviel, damit habe ich mir meine ersten 3 Punkte in Flensburg und ca. 86 EUR Bußgeld eingtefangen.

Folge: Essensgeld für diesen Monat sinkt auf 2 EUR pro tag. *heul

naja selbst schuld....
Grüße Thomas
Member: Der-Herausforderer
Der-Herausforderer May 07, 2007 at 11:36:13 (UTC)
Goto Top
upsala ein kleines Formatierungsproblem gibt es derzeit noch ist es möglich, den Quellcode so abzuändern, dass das einfüger der Daten erst ab Zeile 4 beginnt?

wenn ja an welcher Stelle muss ich den Quellcode anpassen??
Member: Der-Herausforderer
Der-Herausforderer May 07, 2007 at 13:59:36 (UTC)
Goto Top
Hallo bastla,

heute flute ich dein E-Mail Account ;)

ok wegen Abfrage ab zeile 4 Problem gelöst. (war ein bisschen doof hatte den befehl Projektkosten Rangte noch nicht angepasst. *reusper *lach


Derzeitig habe ich jetzt drei Testläufe durchgeführt immer mit dem Resultat, dass Daten nur aus einer, der ursprünglichen Version (Testlauf.xls) geholt werden.


Den Pfad in "StarteZusammenfassung" ist bereist angepasst.
Sub StarteZusammenfassung()
Const sSourcePath As String = "C:\Dokumente und Einstellungen\praktikant1\Desktop\testlauf\"
Dim fso As Object, oFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'
'Hier vorweg die Tabelle "Projektkosten" löschen ?? Was meinst du damit?
'
For Each oFile In fso.GetFolder(sSourcePath).Files
If LCase(Right(oFile.Name, 4)) = ".xls" Then 'nur Excel-Mappen bearbeiten
HoleAusMappe (oFile.Path)
End If
Next
End Sub

Habe ich etwas übersehen...?

Gibt es Benamung von Dateien bspweise durch Sonderzeichen, die nicht möglich ist bzw. ungeeignet für das Makro?

LG Thomas
Member: bastla
bastla May 07, 2007 at 14:53:04 (UTC)
Goto Top
Hallo Thomas!

was meinst du mit dem Kommentar: "'Hier vorweg die Tabelle "Projektkosten" löschen"
Genau das, was Du vermutet hast - allerdings darf das nur einmal, vor dem Übernehmen der einzelnen Projektdateien, passieren und nicht im "Sub Init" (dieses wird bei jeder zu übernehmenden Datei augerufen) - deshalb der Hinweis darauf bzw auf die richtige Position im Code.

Damit sollten dann auch mehr als nur die Daten von "Testlauf.xls" als Ergebnis vorzufinden sein ... face-wink

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer May 07, 2007 at 15:11:59 (UTC)
Goto Top
ah verstehe

habs geändert und ES LÄUFT.

JUCHUUUU DANKE DANKE DANKE

Also das Bier Angebot für Berlin steht noch! face-smile


ah so toll...
So am Ende, interessehalber:

Was machst du eigentlich beruflich...?

LG Thomas
Member: bastla
bastla May 07, 2007 at 15:17:51 (UTC)
Goto Top
Hallo Thomas!

Freut mich, dass es klappt. face-smile

Was machst du eigentlich beruflich...?
Rate mal ...

Grüße
bastla
Member: Der-Herausforderer
Der-Herausforderer May 07, 2007 at 16:55:20 (UTC)
Goto Top
Hallo bastla,

Ich würd ja auf was völlig anderes tippen, denn Beruf und Hobby sind ja meist völlig verschieden. Irgendwer sagte mir mal: "mach deine Hobbies nie zur Berufung, sonst hat man nichts mehr was Spass macht."


mhm....

Variante 1: angewandte Informatik vielleicht Wirtschaftsinformatik
Variante 2: was völlig verqueres wie: Pädagoge, Zweiradmechaniker oder Berufssoldat (Spaß)

ok mal richtig raten:
1. Hast du direkten KOntakt zu Menschen?
2. haben diese einen Kundenstatus?
3. Wer kontrolliert deine Arbeit?
4. Musst du deine Resultate jemanden gegenüber rechtfertigen?
5. Ist es relevant sich über technische Neuerungen auf dem neusten Stand zu halten?

Wie lang bist du denn schon dabei....?


Viele Grüße
Thomas
Member: bastla
bastla May 07, 2007 at 17:24:44 (UTC)
Goto Top
Hallo Thomas!

Um das Verfahren abzukürzen: siehe PN ...

Grüße
bastla