• 16.04.2024, 15:37
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

ExcelSheets in Access laden (VBA - TransferSpreadsheet)

Freitag, 4. April 2014, 14:47

Samma... hat einer von euch bissel plan von Access und VBA?
(ich nämlich nicht :D)

Möchte hier einfach gesagt einen ETL Prozess zwischen Excel-Files und einer Access-Tabelle implementieren... hab also drei Excel Dateien, die in eine Tabelle geladen werden sollen und unterschiedliche Daten(Spalten) für teilweise gleiche Datensätze(Zeilen) mitbringen... (Natürlich gibt's eine Spalte mit einem unified-identifier den ich in der Datenbank als Key nutze...) In Java wär das gerade kein Problem für mich ^^ aber in VBA steh ich wien Ochse vorm Berg.

Ich weiß das man mit dem Befehl DoCmd.TransferSpreadsheet ein ExcelSpreadsheet laden kann, aber ich seh keine Möglichkeit die Excel-Spalten auf meine Datenbank-spalten zu mappen... jemand eine idee?

Sören
A sinking ship is still a ship!

Samstag, 5. April 2014, 11:17

hi,

das thema ist eigentlich kein problem für mich, nur verstehe ich nicht, was du möchtest.
sollen die excel-dateien bearbeitet werden (verknüpfung), willst die die importieren (ggf. nur einmalig), oder auch noch einen excel-output erzeugen???

gruß,
seaslug

Sonntag, 6. April 2014, 15:30

Hi,

hab einen passenden Ansatz gefunden, bei dem ich auf eine Instanz von Excel zugreife...

Aber Situation ist folgende, ich hab (regelmäßig) drei Excel Dateien mit Inhalten. Die könnten zB. so aussehen

Datei 1
ID Name Nachname Adresse

Datei 2
ID Name eMail

Datei 3
ID Arbeitgeber Gehalt


Ich möchte diese Dateien in eine Access Tabelle importieren die dann wiederum folgende Struktur haben könnte

ID Name Nachname Adresse eMail Arbeitgeber Gehalt


Der Key wäre in jeder Datei identisch, nicht zu jedem Datensatz ist aber jede Information vorhanden...
In Datei 1 könnten also die ID 1, 2, 3, 4, 5 sein in Datei 2 nur 2, 3, 4 und 8 und in Datei 3 wiederum 1, 5, 7
usw.

Der Algorithmus sieht also folgendermaßen aus
Lese Excel Datei
Schaue ob ID schon vorhanden, wenn neuen dann neuer Datensatz (INSERT), wenn ja ergänze Datensatz (UPDATE)

Die Exceltabellen Spalten müssen natürlich auf die Access Spalten gemappt werden. Zu allem Überfluss heißen sie je nach Datei auch noch unterschiedlich.
In Java wäre das ne Aufgabe von ner Stunde oder so... in VBA sind mir ein wenig die Hände gebunden weil ich mich nur schlecht auskenne.


Wie gesagt ich hab schon nen Ansatz gefunden der klappen müsste... dabei wird die Excel Datei dann aber wirklich manuell Zelle für Zelle durchgeackert...

Sören
A sinking ship is still a ship!

Montag, 7. April 2014, 16:09

hi,

das geht einfacher.

- zieltabelle mit allen felder erstellen. dein ID wird primärschlüssel (ohne duplikate).
- die 3 excel-dateien in die datenbank verknüpfen
- entsprechend 3 anfügeabfragen erstellen, die die daten an die zieltabelle anfügen. damit ist auch das problem der zuordnung der anderen namen erschlagen.

dann per VBA-code:


on error resume next

docmd.setwarnings = false
docmd.openquery "Name der ersten anfügeabfrage"
docmd.openquery "Name der zweiten anfügeabfrage"
docmd.openquery "Name der dritten anfügeabfrage"
docmd.setwarnings = true


warum so? es werden dann nur alle neuen datensätze angefügt. vorhanden können nicht angefügt werden, da sonst primärschlüsselverletztung. der "fehler" wird einfach übergangen.

dann noch 3 aktualisierungsabfragen, bei denen du die schon vorhandenen IDs der zieltabelle mit den IDs in deinen verknüpften excel-tabellen verknüpfst.

code analog zu oben.


das alles dauert vielleicht 10 minuten. so als anregung.

gruß,
seaslug

Montag, 7. April 2014, 21:10

Hi,

die SQL Querys sind nicht das Problem... sondern der zugriff auf die Excel-Sheets ;)

Sören
A sinking ship is still a ship!

Dienstag, 8. April 2014, 02:04

die brauchst du doch nur zu verknüpfen, wie ich schrieb...

Mittwoch, 9. April 2014, 16:02

und wie geht das in VBA? ;)
A sinking ship is still a ship!

Mittwoch, 9. April 2014, 16:56

hi,

kein vba nötig. access 2010 (z.b.). symbolleiste "externe daten" -> excel -> assistent durchlaufen.

gruß,
seaslug

Donnerstag, 10. April 2014, 19:39

...

ne... wir brauchen hier ne fertige Lösung... Die Dateien fallen einmal im Monat aus dem Reporting-Tool, sie sind von der Struktur ähnlich jedoch halt jeweils neue Dateien... die müssen das mit einen "Import" Button in nem Formular erledigen können... die Lösung muss auch selbstständig erkennen welche art dieser drei Quellen nun gerade importiert wird etc. ...

aber wie gesagt, mit der Lösung die ich gerade verfolge geht das...
Sprich eine Excel Instanz in VBA anfeixen und daraus direkt auf die Zellen zugreifen...

Sören
A sinking ship is still a ship!

Freitag, 11. April 2014, 04:22

hi,

vielleicht hättest du dies auch am anfang, innerhalb einer halbwegs strukturierte frage erklären können. du wirfst mir hier lauter nasse schwämme zu, das macht keinen spaß.
natürlich kannst du eine excel instanz starten, und lesend / schreiben direkt auf die einzelnen zellen zugreifen, ist aber für deine zwecke wahrscheinlich gar nicht nötig.
per import/verknüpfung kannst du, wie gesagt direkt zugreifen. diese definitionen lassen sich speichern, per vba aufrufen und selbstverständlich auch paramater -z.b. dateinamen- übergeben. ggf. auch per open-save dialog (explorer-fenster) und so weiter.
dies setzt nur vorraus, das JEWEILS die 3 datenquellen von der struktur her gleich bleiben.
du erfindest jetzt gerade das rad neu, weil du die schon vorhandenen access funktionalitäten nicht nutzt.

gruß,
seaslug

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »seaslug« (11. April 2014, 04:29)

Ähnliche Themen