Hallo Wissende,
ich kenne mich in Excel ganz gut aus, Access ist für mich noch relativ neu.
Auf Arbeit führen wir eine Postenstatistik, die ich gern neu in Access organisieren will. Die Daten sollen dabei auf einem Netzlaufwerk liegen, die User haben nur ein Frontend.
Mehrere Standorte sollen dort mittels Formular ihre Daten erfassen. Ein Standort (meiner) hat diese Daten schon in einer Excel-Datei, in der auch ein VBA-Makro werkelt. Das Makro "weiß" auch, wann es Zeit ist, die Daten zu erfassen.
Frage nun: Wie kann ich das Excel-VBA so verändern, dass diese Daten automatisch in die Access-Datei eingetragen werden?
Vielen Dank!
Hallo,
Zitatdie User haben nur ein Frontend.
jeder sein eigenes Frontend auf seinem PC ?
Jeder User benötigt dann auch Access, entweder als Vollversion oder als (kostenlose) Runtime.
Im Regelfall ist eine Exceltabelle untauglich zu direkten Datenüberführung nach Access. Eine Accesstabelle erfordert eine andere Struktur als eine Exceltabelle.
Es wäre also erst mal zu klären, ob die Exceltabelle für Access geeignet ist.
Außerdem solltest Du den Import der Exceltabelle von Access aus starten und nicht von Excel (als Export).
Dabei wird die Exceltabelle nur verknüpft und dann per Anfügeabfrage die Daten übertragen. In der Anfügeabfrage können dann ggf. auch Datenanpassungen vorgenommen werden.
Aber wie gesagt, erst müsste man mal die Exceltabelle sehen und dann müsste man noch wissen welche Aufgabe die DB hat.
Hallo Klaus,
vielen Dank. Es gibt folgende Struktur:
1.) eine Access-Datenbank. Hier gibt es pro Standort eine Tabelle, diese enthält für jeden Tag einen Datensatz mit den bearbeiteten Mengen (feste Struktur, etwa 20 Felder). Diese Datenbank wird nur gelegentlich von den Managern geöffnet, um einen der Berichte zu betrachten (Monatliche/Jährliche Daten, Vergleich der Standorte etc.)
2.) Für jeden Standort gibt es eine Erfassungsdatei in Excel. Dort sind die Arbeitstage schon vorangetragen und in jedem Standort trägt jemand diese 20 Werte pro Tag dort ein. Die Werte werden seit 2013 erfasst und die Dateien sind so gross, dass sie mittlerweile aufgeteilt werden mussten. (Jeder Mitarbeiter hat nur einen Thin Client und das Netz ist manchmal schlapp)
3.) In der Access-Datenbank gibt es ein Makro (was ein Kollege für mich geschrieben hat, das hätte ich nicht hinbekommen). Dieses Makro holt alle Daten aus allen Erfassungsdateien (incl. der Auslagerungsdateien) ab und integriert sie in die Datenbank. Besonderheit: Dieses Makro wird dann ausgeführt "wenn gerade mal jemand dran denkt" oder die Führungsetage aktuelle Zahlen will. Aus diesem Grunde wird auch nicht nur der letzte Tag aus den Exceltabellen abgeholt, sondern die gesamten Daten (und die vorhandenen werden gelöscht)
4.) Besonderheit: Mein Standort hat noch eine Excel-Datei für die Produktionsplanung, wo alles relevante drinsteht. Hier gibt es auch fünf Untergruppen, die jeweils ihre Zahlen melden, die müssen für den Standort zusammenaddiert werden. Deswegen ist die Erfassungsdatei besonders groß (es gibt eine Erfassungsseite für die Gruppen und eine Summenseite, auf die der Import zugreift). Besonders diese Datei ist "absturzanfällig"
Ich habe mir nun etwas mehr zu Access beigebracht und will die Tabellen und Abfragen verbessern. (Jetzt nicht das Thema.). Außerdem will ich das Makro für unsere Produktionssteuerungsdatei verbessern. Mein Ziel ist es, dass jede Gruppe ihre Daten einträgt und diese an die Acceess-Datei gesendet werden. Dann brauchen sie nicht in diesen Excel-Konstruktionen zwischengespeichert werden, weil wir nicht sicherstellen können, dass es täglich dort abgeholt wird.
Das Aussehen und die Struktur der Exceltabellen und der Datenbank kann ich selbst bestimmen, wenn etwas konkretes erforderlich ist, wäre das kein Problem.
Viele Grüße
Hans-Jürgen
Hallo,
ich fürchte, das wird so nix. In einer Datenbank kann man keine Exceltabelle 1:1 übernehmen. das geht nicht. Accesstabellen erfordern einen völlig anderen Aufbau als Exceltabellen.
ZitatHier gibt es pro Standort eine Tabelle,
Alle Standorte sind in einer Tabelle zu führen, als reine Standortdaten, ohne die erfassten Werte.
Zitatmit den bearbeiteten Mengen (feste Struktur, etwa 20 Felder).
Hier ist eine weitere Tabelle erforderlich die die Daten in Datensätzen (20 Datensätze, keine 20 Felder) erfasst. Die Tabelle benötigt einen Fremdschlüssel zum Standort.
Bevor Du an Datenübernahme und Makros denkst, muss erst mal die Struktur der Tabellen stimmen. Es werden hier auch mit Sicherheit mehrere Tabellen benötigt die über Beziehungen verknüpft werden müssen. Du solltest Dich auch mit den Grundlagen zu Access als relationale Datenbank beschäftigen.
https://www.access-tutorial.de/
Und um mich zu wiederholen, von Excel kannst Du nichts brauchen, außer den Daten und die müssen über Abfragen in die dann vorliegende Access Tabellenstruktur übertragen werden.
Und noch der Hinweis: Jeder User braucht
sein eigenes Frontend auf seinem PC, hast Du das bedacht.
Kannst Du mal bitte so eine Exceltabelle (mit den 20 Feldern) hier hochladen. Mit einigen (anonymen) Spieldaten.
Hi,
das mit dem Hochladen mache ich dann morgen. Aber schon mal eines, um es nicht zu vergessen: Dass ich die Erfassungsdaten in der Access-Datenbank pro Standort in verschiedene Tabellen organisiert hatte, lag auch daran, dass einige Standorte regionale Feiertage haben und die fehlenden Daten nicht den Durchschnitt verfälschen sollten (mittlerweile kenne ich die Funktion NZ())
Und noch eines, bevor ich es vergesse: Der erste der 20 Werte muss eine Nachkommastelle erlauben, die anderen sind positive Ganzzahlen.
Hans-Jürgen
Hallo,
Zitatdass einige Standorte regionale Feiertage haben und die fehlenden Daten nicht den Durchschnitt verfälschen sollten
das ist für Access völlig bedeutungslos. Wenn es wegen eines Feiertags keine Daten gibt, gibt es auch keinen Datensatz. Die Daten sollten ja nicht in Feldern stehen, sondern in Datensätzen. Wegen Feiertag > kein Wert > kein Datensatz. Dann braucht es auch kein Nz(). Bei einem normalisierten Aufbau ist der Wert in einem Feld, in 1-20 Datensätzen. Ich glaube, Du bist Dir über den Aufbau einer Datenbanktabelle nicht wirklich im Klaren.
ZitatDer erste der 20 Werte muss eine Nachkommastelle erlauben, die anderen sind positive Ganzzahlen.
Dann kannst Du generell eine Kommazahl verwenden, damit können auch Ganzzahlen dargestellt werden.
Und noch mal der Hinweis: Jeder User braucht sein eigenes Frontend auf seinem PC. Das ist zwingend, wenn das nicht möglich ist, kannst Du Access nicht verwenden. Daher der wichtige Hinweis, auf den Du aber leider nicht eingehst.
Hi,
wie gesagt, ich lerne noch. Die Regeln der Normalisierung habe ich verstanden und auch schon in anderen Fällen verwendet.
Dass die Access-Tabelle so aussieht wie sie aussieht, liegt auch vielleicht daran, dass ich damals dort das Design der Excel-Erfassungsmaske (eine Zeile pro Tag) übernommen habe. Ich sehe hier allerdings keine Redundanz. Aber ich denke, ein Blick sagt mehr als 1000 Worte, ich lade dir einen kleinen Teil der Erfassungstabelle mal morgen hoch.
Nachkommazahlen: Ich habe den Tabellenentwurf der Access-Datei entsprechend so formatiert, dass der erste Wert einen Datentyp mit Nachkommastelle beinhalten kann und die anderen nicht. Ich dachte, das wäre relevant für den Speicherplatz?!
Und das andere Thema: Sorry, hatte ich vergessen drauf einzugehen: Ja, jeder User hat ein Access-Frontend.
Hans-Jürgen
Hallo,
Zitatdass der erste Wert einen Datentyp mit Nachkommastelle beinhalten kann und die anderen nicht. Ich dachte, das wäre relevant für den Speicherplatz?!
Du hast es noch nicht verstanden, es bei normalisiertem Aufbau wahrscheinlich nur noch ein Feld zur Aufnahme der Werte, aber dafür mehrere Datensätze. Daher muss der Datentyp für alle zu erwartenden Werte passen und da bleibt nur Double, der für Komma und Ganzzahl verwendet werden kann.
Den Speicherplatz halte ich in diesem Fall für unwichtig.
Hallo Klaus,
ich hatte dich schon verstanden, jeder Datensatz beinhaltet demnach drei Felder: Das Datum, die Art der Information und die Information selbst. (ggf. als viertes Feld noch eine ID). Weil ein Informationstyp selbst auch Nachkommastellen enthalten kann, muss das also ein Double-Feld sein. Allerdings wird in dieser Variante die Art der Information ständig wiederholt, während sie in der bisherigen Version mit der Tabellenüberschrift "codiert" ist. Aber wie gesagt, ich bin da Anfänger und lerne gern dazu.
Anbei nun ein kleiner Ausschnitt der Erfassungsdatei. Wie gesagt, die Access-Tabellen sehen genauso aus (das erste Feld hat das Format Datum, das zweite Double, der Rest Integer)
Die fünfstellige Buchstabengruppe bezeichnet die Art des zu erfassenden Wertes. Vielleicht noch erwähnenswert ist, dass der Standort bereits im ersten Buchstaben verschlüsselt ist. Ein weiteres Standortkennzeichen ist also nicht erforderlich. Bis auf eine Ausnahme haben alle Standorte dieselben Werte, die zu erfassen sind (die Buchstaben 2 bis 5 der Überschrift sind also gleich). Ein Standort erfasst noch Werte, die die anderen nicht haben.
Wie gesagt, in meinem Standort ist die Excel-Datei noch grösser, denn in einer weiteren Tabelle trägt jede Gruppe einzeln ein, und diese Seite hier ist dann nur die Zusammenfassung, die von Access abgeholt wird.
Vielen Dank für deine Mühe!
Hans-Jürgen
Hallo,
die Accesstabelle ist anders aufzubauen, die kann nicht so bleiben wie die Exceltabelle.
Ist der erste Buchstabe (O) immer der Standort ?
Welche Buchstaben gibt es noch (nur mal 2-3) ?
Es gibt Spalten in denen 0 steht, wird die 0 auch benötigt ?
Hallo Klaus,
es gibt außer O noch N, W und C als Standorte. C hat noch weitere Zählpositionen. (Falls du einen Platzhalter brauchst, nimm CEBFA und CRBFA)
Die Art *RPGE muss bleiben, sie ist oft Null, aber nicht immer. Die letzten beiden Spalten (*EAGE und *RAGE) waren für einen Zählposten vorbereitet, der dann doch nicht gekommen ist. Die können weg. (Ich gehe davon aus, dass ich später welche hinzufügen kann)
Hans-Jürgen
Hallo,
die Frage war, ob die 0 auch benötigt wird. Oder ob die 0 einfach heißt keine Werte da.
@Klaus,
es handelt sich wohl um ein O (ohhh) :) und nicht um die Ziffer 0.
@Lachtaube
wie kommst Du darauf dass es um das O geht, das O (zu Beginn der Spaltennamen) ist klar.
Es geht um die Zahl 0 in den Spalten, wonach ich in #9 auch gefragt habe.
Hallo,
im Anhang mal ein Vorschlag mit den Zahlen aus dem Excelmuster.
Bitte Beziehungen ansehen und die Beispielabfrage.
Bei Fragen bitte melden.
Sorry Klaus, ich hatte beim Antworten nur #10 im Auge. :(
Hallo Klaus und Lachtaube,
vielen Dank - ich sehe mir das morgen auf Arbeit mal an, hier habe ich kein Access. Da ich nicht weiß, was ich so auf dem Tisch habe (und ab übermorgen habe ich Urlaub...) kann es sein, dass ich es ganz richtig erst nach dem Urlaub durchdringen kann. War auch erst für die Zeit nach dem Urlaub geplant - konnte ja keiner wissen, dass ihr schneller seid als der Schall ;-))
Um es für euch einfacher zu machen, markiere ich das Thema erstmal als gelöst. Falls ich zu dem hochgeladenen Entwurf noch eine Frage habe, werde ich mich dann nochmal melden.
VIELEN DANK FÜR EURE MÜHE!
Hans-Jürgen
P.S. falls das noch relevant ist: Meinetwegen können die Nullfelder auch leer sein, wenn sichergestellt ist, dass z.B. in Gruppierungen ein Durchschnitt an dieser Stelle mit Null gerechnet wird.