Neuigkeiten:

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

Mobiles Hauptmenü

Werte von Array in Excel Tabelle eintragen

Begonnen von Carlos_C, Juli 08, 2015, 15:25:49

⏪ vorheriges - nächstes ⏩

Carlos_C

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!
   

Gruß,

Carlos

Wurliwurm

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.

daolix

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

Carlos_C

Super! Werde ich testen. Vielen  Dank, Daolix!
Gruß,

Carlos

Carlos_C

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
Gruß,

Carlos

daolix

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.