Hallo Leute,
ich habe vor kurzem einen Access-VBA-Grundkurs mitgemacht und bin noch ein Grünschnabel. Dennoch habe ich es schon mal geschafft, Tabellen von Excel nach Access einzulesen und umgekehrt. Nun habe ich aber das Problem, dass ich aus den vielen Datensätzen, bestimmte Datensätze herausfiltern muss und die dann in eine vorgefertigte Excel-Datei einlesen muss.
Zum besseren Verständnis: Es gibt 5 Verkaufsleiter, denen sind 10 Verkäufer untergeordnet (Zahlen sind fiktiv). Nun muss ich aus den vielen Datensätzen ermitteln, welche Verkaufsleiter betroffen sind und dann für jeden einzelnen Verkaufsleiter die Datensätze herausfiltern und in diese vorbereitete Excel-Datei einlesen.
Die Ermittlung der VLGr (Verkaufsleiter) denke ich, ist mir geglückt. Wie ich Daten von Access in eine Excel-Datei rüberbringe, habe ich schon erstellt. Leider fehlt mir jetzt irgendwie der Zwischenschritt, dass er den ersten Verkaufsleiter (VLGr) ermittelt... zum Beispiel VLGr 1, diese Daten dann nach Excel (zwei verschiedene Tabellen) überträgt und dann weitermacht mit dem nächsten ermittelten Verkaufsleiter.
Hoffe, ich habe mein Problem nachvollziehbar erklären können. Wäre Euch sehr dankbar, wenn ihr mir da rüberhelfen könntet :-)))
Hier mein Versuch mit Kommentaren....
'Abfrage nach VLGr
Dim strSQLopen As String
Dim strSQLCreate As String
Dim lngVLGr As Long
Dim rsVLgr As ADODB.Recordset
Sub ListenAusgabenachExcelmitVerteilung()
'Excel starten und per Variable in Zugriff nehmen
'VLGr auswählen
strSQLopen = "SELECT fürExcelVerteilungVL.VLGr FROM fürExcelVerteilungVL GROUP BY fürExcelVerteilungVL.VLGr HAVING (((fürExcelVerteilungVL.VLGr) Between 1 And 5));"
Set rsVLgr = New ADODB.Recordset
rsVLgr.Open strSQLopen, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
'Schleife durch alle Datensätze
Do Until rsVLgr.EOF
'Zusammenstellen eines SQL-Statements zum Eintrag in neue Excel-Tabelle
Debug.Print "SELECT FROM fürExcelVerteilungVL where [VLGr] =" & rsVLgr![VLGr]
rsVLgr.MoveNext
Loop
Hier fehlt mir dann der Verbindungsweg, wie ich diese beiden Programme ineinanderlaufen lassen kann.
Das ist das Programm für die Übertragung nach Excel (mit eigener Erläuterung)....
Sub ListenAusgabenachExcelohneVerteilung()
'Excel starten und per Variable in Zugriff nehmen
Set appExcel = CreateObject("Excel.Application")
'Excel sichtbar machen
appExcel.Visible = True
'Eine bestehende Exceldatei öffnen
strDateiName = "L:\VorlageTest.xlsx"
Set Datei = appExcel.Workbooks.Open(strDateiName, , True)
'das Tabellenblatt in der Zieldatei ansprechen
Set TabelleINKNBL = Datei.Sheets("Vorlage")
'Schreibzeile für Excel voreinstellen
Zeilenermittlung = 2
'das Recordset, aus dem übertragen wird, vorbereiten und öffnen
Set Datenübertragung = New ADODB.Recordset
Datenübertragung.Open "fürExcelVerteilungVL", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
'Schleife bis zum Ende des Recordsets, um alle Datensätze zu übertragen
Do Until Datenübertragung.EOF
For i = 0 To Datenübertragung.Fields.Count - 1
TabelleINKNBL.Cells(Zeilenermittlung, i + 1) = Datenübertragung.Fields(i)
Next i
Zeilenermittlung = Zeilenermittlung + 1
Datenübertragung.MoveNext
Loop
'das Tabellenblatt in der Zieldatei ansprechen
Set TabelleGesprächsbedarf = Datei.Sheets("Gesprächsbedarf")
'Schreibzeile für Excel voreinstellen
ZeilenermittlungGesprächsbedarf = 2
'das Recordset, aus dem übertragen wird, vorbereiten und öffnen (Gesprächsbedarf)
Set DatenübertragungGesprächsbedarf = New ADODB.Recordset
DatenübertragungGesprächsbedarf.Open "abfGesprächsbedarfEnd", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
'Schleife bis zum Ende des Recordsets, um alle Datensätze zu übertragen (Gesprächsbedarf)
Do Until DatenübertragungGesprächsbedarf.EOF
For i = 0 To DatenübertragungGesprächsbedarf.Fields.Count - 1
TabelleGesprächsbedarf.Cells(ZeilenermittlungGesprächsbedarf, i + 1) = DatenübertragungGesprächsbedarf.Fields(i)
Next i
ZeilenermittlungGesprächsbedarf = ZeilenermittlungGesprächsbedarf + 1
DatenübertragungGesprächsbedarf.MoveNext
Loop
'Erstellen Listendatum aus Abfrage "fürListe" zum Verwenden in Dateinamensgebung
Dim rcsDatum As Recordset, datDatumNeu, datDatumAlt As Date
Set rcsDatum = CurrentDb.OpenRecordset("fürListe")
'datDatumAlt = rcsDatum.Fields("Listevom").Value
datDatumNeu = Format(rcsDatum.Fields("Listevom").Value, "YYYY_MM_DD")
'Datei speichern
strDateiName = "L:\" & datDatumNeu & " _Verkäufer.xlsx"
Datei.SaveAs strDateiName, xlOpenXMLWorkbook
'Recordset schliessen
Datenübertragung.Close
'Excel-Datei wieder schliessen
Datei.Close
'Excel unbedingt schliessen!!!!
appExcel.Quit
Set appExcel = Nothing
End Sub
|