Neuigkeiten:

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

Mobiles Hauptmenü

VBA - Abfrageergebnis in Array Schreiben

Begonnen von swity, Februar 19, 2015, 16:14:24

⏪ vorheriges - nächstes ⏩

swity

Hallo,

eine Tabelle mit ca. 4500 Sätzen und ca. 35 Bereichen.
Ich möchte die jeweiligen Sätze der Bereiche in Excel wegschreiben.
Das funktioniert soweit wenn ich die Bereiche vorher statisch in ein Array schreibe.
Nun möchte ich aber dieses Array aus der Tabelle selber füllen
SELECT liste.bereich
FROM liste
GROUP BY liste.bereich;
liefert mir ja alle "bereich" einmalig, dieses Ergebnis soll nun die Grundlage für den Export darstellen. Über eine Schleife oder so.

Ich habe bereits verschiedenes probiert, es gibt ja div. Hinweise im Netz. Jedoch bringt mich das nicht wirklich weiter. Irgendwas blicke ich da noch nicht :-(
Hier mal mein nicht funktionierender Code: (angepasst auf die o. g. Abrage:
   ' ab hier alle Daten exportieren
   ' -------------------------------------
   'Dim rs As DAO.Recordset
   'Dim cKstWert As String
'   Set dbs = CurrentDb
'   strSQLKst = "SELECT liste.bereich " & _
'               "FROM liste " & _
'               "GROUP BY liste.bereich;"
'   Set rs = dbs.OpenRecordset(strSQLKst)
'   Do Until rs.EOF = True
' ?????
'      cKstWert = rs.GetRows(, , "PartNo")
'      rs.MoveNext
' ?????
'   Loop

für jede Hilfe dankbar

HDS


MzKlMu

Hallo,
Du kannst doch die Abfrage direkt exportieren, wozu hier noch VBA.
Und wenn doch VBA verwende die TransferSpreadsheet Methode zum Export einer gespeicherten Abfrage direkt in ein Excel Arbeitsblatt.
Ein Array halte ich hier für komplett überflüssig.
Gruß Klaus

Wurliwurm

Statt dem GROUP BY lieber SELECT DISTINCT benutzen.

Die Größe eines Arrays muß folgendermassen festgelegt werden:
Dim arrKst() as String
Dim i as integer
Redim arrKst(rs.RecordCount)

Do until rs.eof
arrKst(i) = rs!Bereich
i = i + 1
  rs.movenext
loop

ebs17

Dim vArr As Variant
Dim lNum As Long
...
Set rs = dbs.OpenRecordset(strSQLKst, dbOpenSnapshot)
With rs
   If Not .EOF Then
      .MoveLast
      lCount = .RecordCount
      .MoveFirst
      vArr = .GetRows(lCount)   ' DAO-GetRows benötigt DS-Anzahl
      .Close
   End If
End With


GetRows liefert allerdings ein transponiertes Array.

Tipp: Ein Recordset kann man mittels CopyFromRecordset direkt in ein Excelsheet kopieren.
Mit freundlichem Glück Auf!

Eberhard

swity

Hallo Wurliwurm,

das waren die entscheidenden Infos. Es funktioniert nun.

Die grundsätzliche Vorgehensweise war mir eigentlich klar. Das Problem lag/liegt im nicht wissen wie das Objekt korrekt angesprochen wird. Mal gibt es rs.xxx dann wieder rs!xxx usw. Gibt es da erhellende Texte, möglichst in deutsch?

Danke für die Mithilfe an alle.

HDS