Hallo liebes Forum,
ich habe einen Code erstellt, um Daten eines Feldes einer Abfrage in ein Array einzutragen, und zwar folgendermaßen:
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim n As Long
Dim M As Long
Dim BN() As Variant
Dim B As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("Abfragename", dbOpenSnapshot)
rs.MoveLast
n = rs.RecordCount
B = 0
ReDim BN(1 To n)
rs.MoveFirst
Do While Not rs.EOF
B = B + 1
BN(B) = rs!Feldname
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
Funktioniert sehr gut. Jetzt möchte ich die Werte des Arrays BN() in eine Excel Tabelle ( ,,C:\Test\Datei.xlsx" ) und zwar in der ,,Tabelle1" ab der Zelle B6.
Die Anzahl der Werte des Arrays ist – wie Ihr sehen könnt – variabel. Es soll aber in der Zelle B6 anfangen. Am besten soll das Ganze im Hintergrund passieren, so dass der User nichts sieht.
Geht das?
Freue mich auf jeden Vorschlag!
Zitat von: Carlos_C am Juli 08, 2015, 15:25:49
Geht das?
Freue mich auf jeden Vorschlag!
Wahrscheinlich schon, dazu mußt Du ein Excel-Objekt erzeugen und darauf die Methoden aufrufen. Imo bissl umständlich.
Nachdem Du für jeden Vorschlag dankbar bist: ich würde das im Excel programmieren. Mit ADO-Recordset auf die Daten im VBE zugreifen und dann einfach die Daten in das Sheet schreiben. Das Access wäre dabei passiv und für die Datenhaltung zuständig und im Excel wird präsentiert.
Hallo
es gibt ja die transferspreadshet methode, die hab ich aber nicht wirklich am laufen bekommen, daher verwende ich meistens die CopyfromRecordset
ZitatDim rs As DAO.Recordset
Dim db As DAO.Database
Dim n As Long
Dim M As Long
Dim BN() As Variant
Dim B As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("Abfragename", dbOpenSnapshot)
Dim eApp As Excel.Application
Dim wbk As Excel.Workbook
Dim wsh As Excel.Worksheet
Set eApp = New Excel.Application
With eApp.Workbooks.Open("C:\Test\Datei.xlsx")
Set wsh = .Worksheets("Tabelle1")
wsh.Range("b6").CopyFromRecordset rs
.Save
.Close
End With
eApp.Quit
rs.MoveLast
n = rs.RecordCount
B = 0
ReDim BN(1 To n)
rs.MoveFirst
Do While Not rs.EOF
B = B + 1
BN(B) = rs!Feldname
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
Super! Werde ich testen. Vielen Dank, Daolix!
Wurliwurm, Daolix, vielen Dank für Eure Beiträge!
Daolix, ich habe Deine Lösung getestet. Hat im Prinzip nicht funktioniert, habe dann aber etwas geändert und dann hat es geklappt:
Set db = CurrentDb
Set rs = db.OpenRecordset("Abfragename", dbOpenSnapshot)
Dim eApp As [b]Object[/b]
Dim wbk As [b]Object[/b]
Dim wsh As [b]Object[/b]
Set eApp = [b]CreateObject("Excel.Application")[/b]
With eApp.Workbooks.Open("Pfad zu XLSX Datei")
Set wsh = .Worksheets("Tabelle1")
wsh.Range("b6").CopyFromRecordset rs
.Save
.Close
End With
eApp.Quit
rs.Close
Set rs = Nothing
Set db = Nothing
ZitatHat im Prinzip nicht funktioniert,
Das funktioniert im Prinzip schon, die Änderung vom Earl- zu Latebinding ändert ja nix am Prinzip, du hättest nur die entsprechende Verweise setzen müssen.