Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Import von 'verteilten' Excelwerten in Access

Begonnen von KarlNapp, September 02, 2015, 14:31:46

⏪ vorheriges - nächstes ⏩

KarlNapp

Hallo,

mich erreichen regelmäßig Protokolle als Exceldateien von Mitarbeitern, deren Werte ich in eine Access db überführen möchte, um von dort aus Berichte etc. auszugeben. (Excel und Access in Version 2010)

Dabei komme ich aktuell nicht weiter. Die Werte liegen in der Exceldatei in verschiedenen Blättern in Form von "Formularen", also wild über die Seiten verteilt. Diese Positionen sind allerdings bekannt und ändern sich nicht. Es exisitiert ein Deckblatt und danach 20 Kopien eines Einzelerfassungsformulars.

Ich habe nun durch Suchen u.a. diesen alten Beitrag gefunden, der leider nicht funktioniert, d.h. in meiner Zieltabelle finde ich nur Nullen:
Sub Test()
Dim db As Database 'definiert DB als Datenbank
Dim TB As Recordset 'definiert TB als Tabelle

Set db = OpenDatabase("DeineAccessDatei) ' öffnen AccessDatenbank
Set TB = db.OpenRecordset("DeineAccessTabelle", dbOpenTable) 'öffnet Accesstabelle Anmeldungen

   With TB
      .AddNew
      !Dein Accessfeld = Deine ExcelZelle oder Textbox etc.
   End With

   TB.Update 'schreibt den Datensatz
   TB.Close 'schließt die Tabelle
   db.Close 'schließt die Datenbank

End Sub


Wäre das überhaupt ein akzeptabler Ansatz? Wir reden von ca. 30 Feldern/Mitarbeiterdatei die importiert werden müssen, nur wenige mit Text, die meisten Ja/Nein.

Meine erste Ideen war ein Access VBA Ansatz, der mir aus einer auszuwählenden Excel die Werte aus definierten Excelfeldern in unterschiedlichen Tabellenblättern in definierte Accesstabellenfelder kopiert:
Excel Tagesprotokoll!E12 = Access Tabelle "tbl_Main" Feldname: MA_Name, etc. etc.
Für Vorschläge bin ich sehr dankbar, ich komme mit meinen Mitteln z.Zt. nicht weiter ...
Karl


MaggieMay

Hallo,

ich denke du bist besser beraten, den Vorgang aus Access heraus zu starten, schließlich hast du deine Frage ja auch im Access-Forum gestellt.
Das könnte dann ansatzweise folgendermaßen aussehen:
Dim xlApp As Object, xlWB As Object, xlSh As Object
Dim rs As DAO.Recordset
Set xlApp = CreateObject("Excel.Application")
Set xlWB = xlApp.Workbooks.Open("C:\temp\datei.xls")
Set rs = CurrentDB.OpenRecordset("Zieltabelle")
For Each xlSh in xlWB.Sheets
    rs.AddNew
    rs!feld1 = xlSh.Range("A7")
    ' oder
    rs!feld2 = xlSh.Cells(5,12)
    ' ...
    rs.Update
Next
rs.Close
xlWB.Close
Set xlApp = Nothing

Freundliche Grüße
MaggieMay

KarlNapp

Hallo,

vielen Dank für Deine Antwort. Ich werde mich heute abend daran setzen und es austesten. Und: Abolut richtig, ich bevorzuge den Ansatz aus Access heraus, habe nur keinen gefunden und den Excelansatz daher zitiert. So herum ist es mir viel lieber!

-Karl

Zitat von: MaggieMay am September 02, 2015, 15:11:12
Hallo,

ich denke du bist besser beraten, den Vorgang aus Access heraus zu starten, schließlich hast du deine Frage ja auch im Access-Forum gestellt.
Das könnte dann ansatzweise folgendermaßen aussehen:
Dim xlApp As Object, xlWB As Object, xlSh As Object
.....
Set xlApp = Nothing


KarlNapp

Hallo MaggieMay,

ich kam immer noch nicht dazu, es zu testen, da eine unerwartete Arbeitsladung über mich kam ...

Ich hoffe am kommenden WE zu testen, melde mich dan aber auf alle Fälle.

Gruss, Karl

Zitat von: MaggieMay am September 02, 2015, 15:11:12
Hallo,

ich denke du bist besser beraten, den Vorgang aus Access heraus zu starten, schließlich hast du deine Frage ja auch im Access-Forum gestellt.
Das könnte dann ansatzweise folgendermaßen aussehen:
Dim xlApp As Object, xlWB As Object, xlSh As Object
Dim rs As DAO.Recordset
...
[/quote]