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
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
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
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]