Excel-Datenübernahme/-übergabe

Also: Ich brauche eine automatische Datenübernahme. Es werden täglich 3 Dateien in Excel als Schichten (Produktion) angelegt und in einem Ordner (Explorer) abgelegt. Das heißt, es werden täglich mehr. Nun sollen in einer Exceldatei aus den entandenen/entstehenden Schichtdateien Daten übernommen werden.
Es könnten zwei Wege dazu führen:

  1. Von der Zieldatei aus müssten automatisch in dem Explorerordner nach und nach alle Dateien geöffnet, Daten übernommen und wieder geschlosse werden. Problem, der Algorithmus müsste erkennen, dass immer wieder neue Dateien hinzukommen. Problem zwei: Wie müssen die Befehle lauten, damit in die Zieldatei die Daten fortlaufend übernommen werden?
  2. Ich könnte mir vorstellen, dass die Musterdatei, aus der schließlich die einzelnen Schichtdateien durch manuelle Kopieren angelegt werden, intern eine Befehlsstruktur haben, die die betreffenden Daten automatisch an die Zieldatei übergibt, natürlich auch fortlaufend.
    Die Schichtdateien greifen auf Dateien mit Ausgangsdaten zurück (Artikelstamm, Personalstamm etc.) und verarbeiten déren Daten.
    Problem: Leider müssen in andere Auswertemodule Daten aus den Schichtdateien von Hand übertragen werden. =  Umständlich und eigentlich unüblich.
    Ergo:
    Wer weiß, wie’s geht?
    Danke danke danke danke für Euren Tipp schon mal vorab.

Muss es Excel sein oder kommt Access in Frage? Das ist nämlich eher Aufgabe einer Datenbank als einer Tabellenkalkulation. Ich denke für die Firma wäre es das Beste sich eine Datenbank anzulegen/anlegen zu lassen, die diese Aufgabe erledigt.

Danke für den Tipp. EIngangs vertrat ich dieselbe Auffassung, dies über Accesss zu realisieren. Festlegung war jedoch, in Excel auszuführen. Damit war klar, alles anders zu machen als üblich. Das heißt: Die Schichtdateien sind die „Zentren“, die je nach Aufgabe auf die anderen externen Stammdateien (Artikel, Mitarbeiter, Einstellungen für Abrechnungen Werkzeuganlagen etc.) zwecks Berechnung zugreifen und dazu noch direkte Eintragungen von Daten aufnehmen. Das geschilderte Problem der Datenübergabe an die Auswertungsmodule wäre sicherlich auch an Access sinnvoll. Könnte ich dafür einige Hinweise erhalten - also derart, dass die zentralen Schichtdateien ihre Daten an Access übergeben. Auch hier mein Dankeschön vorab. Gruß Codec

Hallo Codec,

Rekapitulation :
= Täglich kommen ( bis zu ) drei neue Dateien in einen Ordner
= Ein Programm soll selbstständig erkennen, das eine neue Datei angekommen ist.
= Daten müssen aber nur einmalig aus diesen Dateien übernommen werden
= Das Ganze soll mit Excel bearbeitet werden

Auch wenn es etwas abgedroschen klingt und inhaltlich auch nicht ganz stimmt :
DAS GEHT MIT EXCEL NICHT  ( jedenfalls nicht mit den allgemeinen Bordmitteln )

Zunächst bräuchtest Du einmal ein Ereignis, das den Prüf-Prozess auslöst. Du hast hier wahrscheinlich an den Schreibzugriff auf den Ordner gedacht, ebenso gut wäre ein Timer, der regelmäßig diesen Ordner kontrolliert, zum Beispiel jede Stunde einmal. Bei dem reinen Excel ist die Eingabe eines neuen Zellwertes ein solches Ereignis ( oder das Drücken von F9 ). Über ein Makro wäre ein Timer vielleicht hinzukriegen; ein Betriebssystem-Ereignis könnte das Excel-Programm starten.

Dann brauchst Du die Erkennung des „Neuen“.
Das kannst Du mit einem Vergleich zu gespeicherten „Alten“ Angaben machen - oder durch einfaches Umbenennen bereits berücksichtigter Dateien oder durch das Einbringen eines inhaltlichen Kennzeichens, oder …
Leider ist hier alles offen für Manipulationen - und wie gehst Du mit Fehlerhaften Angaben um, zum Beispiel wenn jemand eine bereits berücksichtigte Datei umbenennt oder nachträgliche Korrekturen einträgt ?

Und dann soll Excel die korrigierten „Alten“ Werte wieder herausschreiben, damit sie für den nächsten Aufruf verwendet werden können ?  Hier läuft nichts ohne Programmierung - also doch eher eine Aufgabe für Delphi oder ein anderes „echtes“ Programm.

Wie Excel den Inhalt eines Ordners herausbekommt, weiß ich leider nicht - weil es eben nicht das Ziel von Excel war, Dateien zu manipulieren, sondern nur die Daten.

Deshalb ist die Arbeit „Daten aus den Schichtdateien von Hand übertragen“ für Excel eigentlich die einzig richtige Methode, wobei man hier Vereinfachungen mit Copy/Paste oder Datein-Import verwenden kann.

Die Auswertung selbst ist dann wieder „State-of-the-Art“, auch wenn Deine Angaben „Personalstamm“ eher auf eine Datenbank schließen lässt.

Tja, dies ist wahrscheinlich nicht die von Dir gewünschte Antwort

Mit Gruß,
                  Frank-Thomas

Hallo Codec,

Also: Ich brauche eine automatische Datenübernahme. Es werden
täglich 3 Dateien in Excel als Schichten (Produktion) angelegt
und in einem Ordner (Explorer) abgelegt. Das heißt, es werden
täglich mehr. Nun sollen in einer Exceldatei aus den
entandenen/entstehenden Schichtdateien Daten übernommen
werden.

in einem Ordner mit bekanntem Namen kommen täglich xls-Dateien dazu.
In einer Haupt-xls-Datei sollen dann Daten aus den neu hinzugekommenen Dateien eingetragen werden.
Richtig?

Es könnten zwei Wege dazu führen:

  1. Von der Zieldatei aus müssten automatisch in dem
    Explorerordner nach und nach alle Dateien geöffnet, Daten
    übernommen und wieder geschlosse werden. Problem, der
    Algorithmus müsste erkennen, dass immer wieder neue Dateien
    hinzukommen. Problem zwei: Wie müssen die Befehle lauten,
    damit in die Zieldatei die Daten fortlaufend übernommen
    werden?

Das geht mit Vba.

  1. Ich könnte mir vorstellen, dass die Musterdatei, aus der
    schließlich die einzelnen Schichtdateien durch manuelle
    Kopieren angelegt werden, intern eine Befehlsstruktur haben,
    die die betreffenden Daten automatisch an die Zieldatei
    übergibt, natürlich auch fortlaufend.
    Die Schichtdateien greifen auf Dateien mit Ausgangsdaten
    zurück (Artikelstamm, Personalstamm etc.) und verarbeiten
    déren Daten.
    Problem: Leider müssen in andere Auswertemodule Daten aus den
    Schichtdateien von Hand übertragen werden. =  Umständlich und
    eigentlich unüblich.

Habe ich nicht verstanden wie da was warum geschehen soll.

Ergo:
Wer weiß, wie’s geht?

Ich und andere.

Danke danke danke danke für Euren Tipp schon mal vorab.

Mein Tipp war schon, „Das geht mit Vba.“.
Wenn dir das nicht reicht brauchst du keinen Tipp sondern mehr, den Vba-Code. D.h., jmdn. der dir das programmiert.

Gruß
Reinhard

Oh, oh,
ich habe leider eine solch „erbauliche“ Antwort erwartet. Das Tolle ist, ich bin leider kein ausgebildeter Programmierer, habe nur Anwenderkenntnisse und habe etwas entwickelt, worüber sich jeder Programmierer totlachen würde, aber es funktioniert halt Klasse und hat eine recht beachtliche Vielfalt an datenbanküblichen Aufgaben integriert, die natürlich nicht unbedingt für eine Tabellenkalkulation gedacht sind, sondern Datenbanken übertragen sind. Das ist mir bewusst. Leider sind mir nur Möglichkeiten über die vorhandene MS-Office-Software eröffnet :smile: :frowning:.
Ich entnehme aber dennoch aus Deinem Hinweis Gedankenimpulse - u.a. „Daten-Import“. Sollte mir dennoch auch dieser Umstandsweg gelingen, werde ich mit dem Ruf „euroica“ die Welt „erfreuen“. Ich bleibe also dran, zumal das bisher Erreichte von den wunscherfüllten Betrachten meiner Schöpfung immer nur mit dem typischen „Geht-Nicht-Nicken“ begleitet und hernach mit Staunen begleitet war. Also dann erst einmal trotzdem vielen Dank
von Codec

Danke, lieber Reinhard,
klingt gut mit dem VBA. Quälende Frage: Kannst Du mir eine etwaige Anregung über die Befehlsstruktur per BVA für diesen Vorgang zur Variante 1 schicken?
Zur Erläuterung Variante 2.
WIe beschrieben, gibt es Basisdateien (Personalstammdaten, Werkzeugstammdaten, Artikelstammdaten Zeitdaten etc.)
Dann wird aus einer Musterdatei, in der die Verbindungen per Verweisbefehl hergestellt sind und mit beim Anlegen einer neuen Schicht übernommen werden, sodass in der jeweiligen neu zu erstellenden Schichtdatei bereits Daten übernommen werden, die man braucht, um halt die Schicht inhaltlich zu definieren wie in einer Auftragsbearbeitung, in der Kundendaten, Artikeldaten etc. automatisch eingetragen werden. Im Angebot sind dann bewegliche Daten wie Menge, Nachlässe etc. einzutragen. Das heißt, die neue Schichtdatei greift auf betshende Dateien zu und holt sich die Daten herüber. Kein Problem also. Vrainate 2 liegt die Überlegung zugrunde, dass genau diese Musterdatei, die jetzt Schichtsatei wird, nicht nur besagte Daten abholt, sondern gleichzeitig nach dem Abspeichern z.B. an die Zieldatei (Auswertung) aktiv übergibt, ohne dass die Zieldatei geöffnet werden nuss, jede einzelne Datei von Hand zu öffnen ist, die Daten übernimmt, geschlossen wird und dann die Datei wieder schließt und so mit jeder Datei einzeln zu verfahren ist. Mit Makro würde dies sicherlich gehen. Da aber die Anzahl der Schichtdateien täglich wächst, diese aber immer im selben Explorerordner sind, müsste der Befehl ja ebenfalls täglich erweitert werden, um auch die aktuellen Daten nach selbem Prinzip zu erfassen. Würde die Datei von sich aus die Übergabe der Zieldatei „aufdrängen“, könnte dies den Prozess anwenderfehlerfrei gestalten und die Zeit händischen Übernehmens von speziellen Daten gewährleisten. Soweit die Idee. Ich hatte erste Variante, per Makro öffnen, Datenabgleich, schließen etc. schon in einem anderen Programm erfolgreich realisert. Doch da waren die jeweiligen Quelldaten fix in der Zahl. Hier hingegen nicht. Deren Unterscheidung im Dateinamen ist dann das Dateum und ein Kürzel für die jeweilige Schicht. Ansonsten müsste man im Vorfeld für ein Jahr diese Schichtdateien generieren und könnte somit ein „starres“ Makro fertigen, dass über Zeitraum X den Abgleich ausführt. Klingt machbar, dürfte noch vpor 10 Jahren der Bringer gewesen sein, heute jedoch eher den Vergleich mit einem Rechenschieber erfahren.
Wäre prima, wenn Dir noch etwas Gutes dazu einfällt. Vielleicht ist es mir jetzt gelungen, meine Gedanken - leider mit viel Text - sichbarer zu machen als vorher. Vorab mein Dankeschön

Danke, Frank-Thomas, hier noch eine Ergänzung, die ich nach einem Hinweis über VBA-EInsatz erhalten habe, um meine zweite Version etwas näher zu erläutern. Ich weiß nicht, ob man das darf, einen Kommentar zu einem anderen Helfenden und Mitsreiter auch jemandem anderen zu senden. Wenn nicht, dann entchuldige ich mich. Dürfte aber die Sache trotzdem etwas aufhellen. Danke für das Verständnis.
VBA-klingt gut. Quälende Frage: Könnte ich da vielleicht eine etwaige Anregung über die Befehlsstruktur per BVA für diesen Vorgang zur Variante 1 bekommen?
Zur Erläuterung Variante 2.
WIe beschrieben, gibt es Basisdateien (Personalstammdaten, Werkzeugstammdaten, Artikelstammdaten Zeitdaten etc.)
Dann wird aus einer Musterdatei, in der die Verbindungen per Verweisbefehl hergestellt sind und mit beim Anlegen einer neuen Schicht übernommen werden, sodass in der jeweiligen neu zu erstellenden Schichtdatei bereits Daten übernommen werden, die man braucht, um halt die Schicht inhaltlich zu definieren wie in einer Auftragsbearbeitung, in der Kundendaten, Artikeldaten etc. automatisch eingetragen werden. Im Angebot sind dann bewegliche Daten wie Menge, Nachlässe etc. einzutragen. Das heißt, die neue Schichtdatei greift auf betshende Dateien zu und holt sich die Daten herüber. Kein Problem also. Vrainate 2 liegt die Überlegung zugrunde, dass genau diese Musterdatei, die jetzt Schichtsatei wird, nicht nur besagte Daten abholt, sondern gleichzeitig nach dem Abspeichern z.B. an die Zieldatei (Auswertung) aktiv übergibt, ohne dass die Zieldatei geöffnet werden nuss, jede einzelne Datei von Hand zu öffnen ist, die Daten übernimmt, geschlossen wird und dann die Datei wieder schließt und so mit jeder Datei einzeln zu verfahren ist. Mit Makro würde dies sicherlich gehen. Da aber die Anzahl der Schichtdateien täglich wächst, diese aber immer im selben Explorerordner sind, müsste der Befehl ja ebenfalls täglich erweitert werden, um auch die aktuellen Daten nach selbem Prinzip zu erfassen. Würde die Datei von sich aus die Übergabe der Zieldatei „aufdrängen“, könnte dies den Prozess anwenderfehlerfrei gestalten und die Zeit händischen Übernehmens von speziellen Daten gewährleisten. Soweit die Idee. Ich hatte erste Variante, per Makro öffnen, Datenabgleich, schließen etc. schon in einem anderen Programm erfolgreich realisert. Doch da waren die jeweiligen Quelldaten fix in der Zahl. Hier hingegen nicht. Deren Unterscheidung im Dateinamen ist dann das Dateum und ein Kürzel für die jeweilige Schicht. Ansonsten müsste man im Vorfeld für ein Jahr diese Schichtdateien generieren und könnte somit ein „starres“ Makro fertigen, dass über Zeitraum X den Abgleich ausführt. Klingt machbar, dürfte noch vpor 10 Jahren der Bringer gewesen sein, heute jedoch eher den Vergleich mit einem Rechenschieber erfahren.
Wäre prima, wenn Dir noch etwas Gutes dazu einfällt. Vielleicht ist es mir jetzt gelungen, meine Gedanken - leider mit viel Text - sichbarer zu machen als vorher. Vorab mein herzliches Dankeschön

Hallo Codec,

Kannst Du mir eine
etwaige Anregung über die Befehlsstruktur per BVA für diesen
Vorgang zur Variante 1 schicken?

zunächst mal braucht man eine Coderoutine die dir diesen Ordner ausliest. Und nur die Dateien auflistet die einen bestimmten Zeitstempel haben der größer ist als der von der letzten „Auslesung“ in Excel gespeicherte…
Bei erstmaligem Start des Codes muß man einmalig den Zeitstempel vorgeben.

Dann werden Daten der „gefunden“ Dateien in die Mutterdatei übertragen.
So der grobe Plan.

Wichtige, vorab zu klärende "Feinheiten gibt es etliche.
Wo soll der Code stehen? In der Mutterdatei, in einem Add-In, in der persönlichen Mappe,oder, oder?
Wie stellt man sicher daß auch Vba zugelassen/aktiviert wurde?

Wie soll der Code gestartet werden, Symbol oben in den Symbolleisten, Tastenkombination, Button in einem Blatt der Mutterdatei,…?

Das waren jetzt nur wenige der Fragen die jmd. der dir die Codes bauen soll stellen/klären wird/muß.

Zu Variante 2, ähnliche Nachfragen dazu sind noch zu klären…

Deine Aussage:

„Da aber die Anzahl der Schichtdateien täglich wächst, diese aber immer im selben Explorerordner sind, müsste der Befehl ja ebenfalls täglich erweitert werden“

ist nicht korrekt. Der Code sucht sich schon automatisch die tagesaktuellen Dateien heraus.

Gruß
Reinhard, den man anmailen darf für Excel/Vba-Lösungsaufträge