Mai 16, 2021, 22:27:50

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Mehrere Werte aus Excel-Tabelle in eine Access-Tabelle importieren

Begonnen von Ratoncito, Mai 03, 2021, 10:27:23

⏪ vorheriges - nächstes ⏩

Ratoncito

Hallo,

ich möchte über VBA aus einer Excel-Tabelle bestimmte Werte in eine Access-Tabelle importieren.

Im Anhang habe ich einen Screen der Tabellen angefügt.
In Excel entsprechen die Spaltenüberschriften den Feldnamen in Access.
Einfügen möchte ich die Werte am Schnittpunkt von DatumWert und IdfWert.
Gespeichert ist die Tabelle Werte.xlsx unter:
D:\A&W-Dokumente\02 Wolfgang\Access

Für Eure Hilfe im Voraus vielen Dank

Gruß - Wolfgang

Sie dürfen in diesem Board keine Dateianhänge sehen.
Sie dürfen in diesem Board keine Dateianhänge sehen.


DF6GL

Hallo,

was möchtest Du nun?  In eine vorhandene Tabelle neue Tabellenfelder einfügen  oder Werte aus der Excel-Liste in schon bestehende Tabellenfelder anhängen, bzw. aktualisieren?

Oder vielleicht auch beides?

Ratoncito

Hallo,

Zitat von: DF6GL am Mai 03, 2021, 13:23:28was möchtest Du nun?  In eine vorhandene Tabelle neue Tabellenfelder einfügen  oder Werte aus der Excel-Liste in schon bestehende Tabellenfelder anhängen, bzw. aktualisieren?
Oder vielleicht auch beides?

Die beste Lösung:
Datum und Werte in Excel vorhanden - Datum in Access nicht vorhanden: Datum und Werte in Access einfügen.
Datum in Access schon vorhanden: Werte aus Excel werden eingefügt, wenn das Feld in Excel nicht Null oder Leer ist.

Zum besseren Verständnis:
Datum und Werte werden in der Excel-Tabelle zugefügt und eventuell auch korrigiert. Diese Daten sollen dann nach Access übernommen werden.
Die IdfWert entspricht der Spaltenüberschrift in Excel, ist schon in Access vorhanden und muss nicht neu zugefügt werden. Lediglich das Datum und die Inhalte (Werte) an den Kreuzungspunkten können neu hinzukommen.

Gruß - Wolfgang

Beaker s.a.

Hallo,
Werden die Daten nur in dem Excel-Sheet geändert?
Dann würde doch eine Verknüpfung reichen, um die Daten in
Access immer aktuell zu haben. Für Access ist das wie eine
eigene Tabelle.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

DF6GL

Hallo,

bei einer reinen permanenten Verknüpfung kommt man schnell mit den Zugriffssperrungen in Konflikt.

Mir ist es immer noch nicht klar, ob neue Tabellenfelder hinzukommen sollen oder nicht.


Wie auch immer:

Importiere die Excel-Datei in eine (neue) Access-Tabelle.

Benutze dann Anfüge-, bzw. Aktualisierungsabfragen, um Daten in gewünschter Weise von dort in die vorhanden Access-Tabelle zu übertragen.

Wenn neue Tabellenfelder erforderlich sind, könnten diese mit DDL-Statements oder auch DAO-Methoden in die Tabelle eingebaut werden.


Woher kommt denn "lfdWert" ??

Ratoncito

Hallo,

ganz so einfach geht es nicht.

Zitat von: DF6GL am Mai 03, 2021, 14:45:19Importiere die Excel-Datei in eine (neue) Access-Tabelle.

Benutze dann Anfüge-, bzw. Aktualisierungsabfragen, um Daten in gewünschter Weise von dort in die vorhanden Access-Tabelle zu übertragen.

Wenn neue Tabellenfelder erforderlich sind, könnten diese mit DDL-Statements oder auch DAO-Methoden in die Tabelle eingebaut werden.

Woher kommt denn "lfdWert" ??

"lfdWert" ist "IdfWert" - eine Fremd ID aus einer anderen Tabelle und ist identisch mit der Spaltenüberschrift bei Excel.

Neue Tabellenfelder sollen nicht über die Abfrage erzeugt werden.

Wenn ich die Excel-Datei in eine Access-Tabelle importiere wird mir für jede "IdfWert" ein Feld in der Tabelle erstellt. Die kann ich so nicht verwenden.

Gruß - Wolfgang


DF6GL

Hallo,



ZitatWenn ich die Excel-Datei in eine Access-Tabelle importiere wird mir für jede "IdfWert" ein Feld in der Tabelle erstellt. Die kann ich so nicht verwenden.

warum nicht?

Wenn ich es richtig verstehe, dann ist "lfdWert" die Zahl, die in der Excel-Liste in Zeile 1 ab Spalte B jeweils steht.

Deine Importtabelle besteht also aus den Tabellenfeldern (lt. Beispiel):

DatumWert
1
98
94
110
77
73
103
102
102
101
87
106
49
104

Was hindert Dich jetzt daran, für jedes Tabellenfeld (entspr. jeder Excel-Spalte) eine Anfüge- und/oder Aktualisierungsabfrage auf die Access-Tabelle abzusetzen?


Das ganze kann dann auch "automatisch" geschehen, indem per VBA die Tabellenfelder "durchlaufen" werden und jeweils die entspr. Abfrage ausgeführt wird.





Ratoncito

Hallo,

die Importtabelle müsste immer neu erstellt werden, wenn ein weiterer Artikel hinzukommt.

Die Zahl in der Excel-Liste in Zeile 1 ab Spalte B heißt "IdfWert" und ist in Access identisch mit einem Fremdschlüssel über den die Werte an den Schnittpunkten von Datum und "IdfWert" einem Artikel in Access zugeordnet werden.

Kommt ein neuer Artikel in Access hinzu, hat er auch eine Zahl ("IdfWert"). Diese Zahl wird dann als Spaltenüberschrift in Excel verwendet, um hierfür Werte zu erfassen.

Ich möchte über einen Aufruf aus Access nach der Excel-Tabelle schauen und neue oder geänderte Daten in der Access-Tabelle anfügen.

Gruß - Wolfgang

ebs17

Zitatneue oder geänderte Daten in der Access-Tabelle anfügen
Das halte ich für effizient: Grundlagen - SQL ist leicht (4) - Aktualisierung einer Tabelle

Deine Exceltabelle ist dafür aber schlecht geeignet, es sei denn, man möchte umständlich und fehleranfällig viele Schleifen laufen lassen.
Empfehlenswert wäre ein Unpivot auf die Tabelle. Das könnte man einfach direkt in Excel über Power Query erledigen lassen, oder aber man löst es über eine temporäre Zwischentabelle (Grundlagen - SQL ist leicht (9) - Pivottabelle in Listtabelle umformen)
Mit freundlichem Glück Auf!

Eberhard

Ratoncito

Hallo,

ich würde gerne nochmal auf meine eigentliche Frage zurückkommen.

Ich möchte über VBA den Wert am Schnittpunkt von Datum und einer über die Spaltenüberschrift bestimmten Spalte aus einer Excel-Tabelle in eine Acces-Tabelle einfügen.

Ist das möglich, und wenn ja wie?

Gruß - Wolfgang




DF6GL

Hallo,,,

ZitatIst das möglich

Ja

Zitatund wenn ja wie?

Habe ich vorher doch vorgeschlagen und ebs hat Dir einen alternativen Lösungsweg gezeigt.


Was hakt jetzt und wo?


Willst Du  ein vollständiges und funktionierendes DB-Modul?

Ratoncito

Hallo,

sorry, aber ich sehe nichts was ich mit VBA in Verbindung bringen würde.

Zu der vorgeschlagenen Importtabelle hatte ich angemerkt, dass diese Tabelle immer geändert werden müsste, wenn eine neue Spalte mit "IdfWert" hinzukommen würde.

Ich habe eher an so etwas gedacht:
  strSQL = " INSERT INTO tblWert ... und so weiter

Leider weiß ich nicht, ob und wie man direkt auf eine Excel-Tabelle und die Inhalte zugreifen kann.
Dass die Excel-Tabelle dafür schlecht geeignet ist, hat ebs17 ja schon geschrieben. Daraus schließe ich, dass es nicht unmöglich ist.

Gruß - Wolfgang




DF6GL

Hallo,

Zitataber ich sehe nichts was ich mit VBA in Verbindung bringen würde.

ich schon, wenn Du meine Postings liest: Die Importtabelle per Recordset öffnen, die einzelnen Feldname durchlaufen (--> ldfWert) und jeweils eine Insert-Abfrage ausführen.


ZitatstrSQL = " INSERT INTO tblWert ... und so weiter

Das ist doch (unfertiger) VBA-Code!?



ZitatZu der vorgeschlagenen Importtabelle hatte ich angemerkt, dass diese Tabelle immer geändert werden müsste, wenn eine neue Spalte mit "IdfWert" hinzukommen würde.

Habe ich auch in meinen Postings erwähnt ("neue Tabelle"!). Das macht eine Importfunktion mit Transferspeadsheet doch.. Oder wenn das Excel-Sheet verknüpft ist, ist es immer aktuell. Hierbei gibt es, wie auch schon erwähnt, möglicherweise Schreibkonflikte mit Excel.


ZitatLeider weiß ich nicht, ob und wie man direkt auf eine Excel-Tabelle und die Inhalte zugreifen kann.

Du kannst eine Excel-Datei als Link im den Navibereich verknüpfen.
Du kannst mit Transferspeadsheet die Excel-Datei importieren oder verlinken.


"direkt" brauchst Du nicht, wenn Du das Sheet in eine Access-Tabelle importierst.



Zitathat ebs17 ja schon geschrieben. Daraus schließe ich, dass es nicht unmöglich ist.

Dann versuch doch wenigstens, diesen Weg mal anzugehen...



Was ist da jetzt insgesamt nicht zu verstehen?