Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Carlos_C am Juli 08, 2015, 15:25:49

Titel: Werte von Array in Excel Tabelle eintragen
Beitrag von: Carlos_C am Juli 08, 2015, 15:25:49
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!
   

Titel: Re: Werte von Array in Excel Tabelle eintragen
Beitrag von: Wurliwurm am Juli 08, 2015, 17:56:07
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.
Titel: Re: Werte von Array in Excel Tabelle eintragen
Beitrag von: daolix am Juli 08, 2015, 17:59:18
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
Titel: Re: Werte von Array in Excel Tabelle eintragen
Beitrag von: Carlos_C am Juli 08, 2015, 18:56:11
Super! Werde ich testen. Vielen  Dank, Daolix!
Titel: Re: Werte von Array in Excel Tabelle eintragen
Beitrag von: Carlos_C am Juli 09, 2015, 09:37:53
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
Titel: Re: Werte von Array in Excel Tabelle eintragen
Beitrag von: daolix am Juli 09, 2015, 10:41:39
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.