Abfragen/temp Tabellen aus Access in Excel exportieren
hi,
ich habe in access vier abfragen mit jeweils einem wert. diese 4 werte(aus vier abfragen) will ich mittels vba aus access in eine excel tabelle exportieren und zwar soll jeden wert an einer bestimmten stelle. kann mir jemand helfen?
thx mac
ich habe in access vier abfragen mit jeweils einem wert. diese 4 werte(aus vier abfragen) will ich mittels vba aus access in eine excel tabelle exportieren und zwar soll jeden wert an einer bestimmten stelle. kann mir jemand helfen?
thx mac
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 16988
Url: https://administrator.de/contentid/16988
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
13 Kommentare
Neuester Kommentar
Das Problem habe ich auch.
Es funktioniert zum Einen mit einem Import externer Daten in Excel oder mit einem Modul in Access, womit eine Excel-Tabelle generiert wird.
Leider ist mir bislang nicht bekannt, wie ich so ein Modul programmieren kann.
Access ist da sehr unübersichtlich.
Vielleicht kann ja jemand erläutern, wie so etwas genau funktioniert.
Es funktioniert zum Einen mit einem Import externer Daten in Excel oder mit einem Modul in Access, womit eine Excel-Tabelle generiert wird.
Leider ist mir bislang nicht bekannt, wie ich so ein Modul programmieren kann.
Access ist da sehr unübersichtlich.
Vielleicht kann ja jemand erläutern, wie so etwas genau funktioniert.
Hi,
das Problem läßt sich aus Access herauslösen, wenn du ein VBA-Modul wie unten beschrieben benutzt.
mfg
Public Sub test()
Dim xlApp As Object ' Excel.Application
Dim xlBook As Object ' Excel.Workbook
Dim xlSheet As Object ' Excel.Worksheet
Dim rst As DAO.Recordset
'Excel-Objekt öbffnen und Workbook hinzufügen
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add()
'Wert aus 1.Abfrage in Zelle A4 kopieren
Set xlSheet = xlBook.Worksheets(1)
Set rst = CurrentDb.OpenRecordset("Abfrage1")
xlSheet.Range("A4").CopyFromRecordset rst
rst.Close
'Wert aus 2.Abfrage in Zelle C4 kopieren
Set rst = CurrentDb.OpenRecordset("Abfrage2")
xlSheet.Range("C4").CopyFromRecordset rst
rst.Close
'Objekte schließen
Set rst = Nothing
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
das Problem läßt sich aus Access herauslösen, wenn du ein VBA-Modul wie unten beschrieben benutzt.
mfg
Public Sub test()
Dim xlApp As Object ' Excel.Application
Dim xlBook As Object ' Excel.Workbook
Dim xlSheet As Object ' Excel.Worksheet
Dim rst As DAO.Recordset
'Excel-Objekt öbffnen und Workbook hinzufügen
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add()
'Wert aus 1.Abfrage in Zelle A4 kopieren
Set xlSheet = xlBook.Worksheets(1)
Set rst = CurrentDb.OpenRecordset("Abfrage1")
xlSheet.Range("A4").CopyFromRecordset rst
rst.Close
'Wert aus 2.Abfrage in Zelle C4 kopieren
Set rst = CurrentDb.OpenRecordset("Abfrage2")
xlSheet.Range("C4").CopyFromRecordset rst
rst.Close
'Objekte schließen
Set rst = Nothing
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
Danke für die schnelle Antwort.
Ich habe den Code einfach mal in meine Anwendung unverändert hineinkopiert.
Beim Ausführen bekomme ich dann die Fehlermeldung:
Fehler beim Kompilieren:
Benutzerdefinierter Typ nicht definiert
Dabei wird die Programmzeile
Dim rst As DAO.Recordset
blau hinterlegt.
Woran liegt das denn?
Hat sich erledigt!
Wer suchet der findet.
Ich hatte die "Microsoft DAO 3.6 Object Library" nicht aktiviert.
Danach funktioniert das script.
Vielen Dank!!!
Ich habe den Code einfach mal in meine Anwendung unverändert hineinkopiert.
Beim Ausführen bekomme ich dann die Fehlermeldung:
Fehler beim Kompilieren:
Benutzerdefinierter Typ nicht definiert
Dabei wird die Programmzeile
Dim rst As DAO.Recordset
blau hinterlegt.
Woran liegt das denn?
Hat sich erledigt!
Wer suchet der findet.
Ich hatte die "Microsoft DAO 3.6 Object Library" nicht aktiviert.
Danach funktioniert das script.
Vielen Dank!!!
@visit
Laut Aufruf der VBA-Hilfe in Excel und Eingabe des Suchbegriffs "CopyFromRecordSet" könnte es in Excel 2002 so gehen:
[Zitat]
CopyFromRecordset-Methode
Siehe auch Betrifft Beispiele Zusatzinfo
Kopiert den Inhalt eines ADO- oder DAO-Recordset-Objekts in ein Arbeitsblatt, wobei an der linken oberen Ecke des angegebenen Bereichs begonnen wird. Enthält das Recordset-Objekt Felder mit OLE-Objekten, schlägt diese Methode fehl.
Ausdruck.CopyFromRecordset(Data, MaxRows, MaxColumns)
Ausdruck Erforderlich. Ein Ausdruck, der ein Range-Objekt zurückgibt.
Data Erforderlicher Variant-Wert. Das Recordset-Objekt, das in den Bereich kopiert werden soll.
MaxRows Optionaler Variant-Wert. Die maximale Anzahl von Datensätzen, die in das Arbeitsblatt kopiert werden sollen. Wenn Sie dieses Argument nicht angeben, werden alle Datensätze im Recordset-Objekt kopiert.
MaxColumns Optionaler Variant-Wert. Die maximale Anzahl von in das Arbeitsblatt zu kopierenden Feldern. Wenn Sie dieses Argument nicht angeben, werden alle Felder im Recordset-Objekt kopiert.
Anmerkung
Das Kopieren beginnt mit der aktuellen Zeile des Recordset-Objekts. Nach dem Kopieren hat die EOF-Eigenschaft des Recordset-Objekts den Wert True.
Beispiel
In diesem Beispiel werden die Feldnamen von einem DAO-Recordset-Objekt in die erste Zeile eines Arbeitsblattes kopiert und fett formatiert. Anschließend wird in diesem Beispiel der Datensatz in das Arbeitsblatt kopiert, beginnend mit Zelle A2.
For iCols = 0 to rs.Fields.Count - 1
ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
ws.Range(ws.Cells(1, 1), _
ws.Cells(1, rs.Fields.Count)).Font.Bold = True
ws.Range("A2").CopyFromRecordset rs
[Zitat Ende]
Leider hast Du nicht gepostet, welche Excel/Accessversionen Du verwendest - ich könnte sonst noch ein paar Bekannte anrufen, die eventuell Deine Version im Einsatz haben und um kurzes Nachgucken in der Hilfe bitten.
BTW, auf welche Art hast Du denn versucht, Dich mit Deiner Frage auseinanderzusetzen?
Grüße Biber
Laut Aufruf der VBA-Hilfe in Excel und Eingabe des Suchbegriffs "CopyFromRecordSet" könnte es in Excel 2002 so gehen:
[Zitat]
CopyFromRecordset-Methode
Siehe auch Betrifft Beispiele Zusatzinfo
Kopiert den Inhalt eines ADO- oder DAO-Recordset-Objekts in ein Arbeitsblatt, wobei an der linken oberen Ecke des angegebenen Bereichs begonnen wird. Enthält das Recordset-Objekt Felder mit OLE-Objekten, schlägt diese Methode fehl.
Ausdruck.CopyFromRecordset(Data, MaxRows, MaxColumns)
Ausdruck Erforderlich. Ein Ausdruck, der ein Range-Objekt zurückgibt.
Data Erforderlicher Variant-Wert. Das Recordset-Objekt, das in den Bereich kopiert werden soll.
MaxRows Optionaler Variant-Wert. Die maximale Anzahl von Datensätzen, die in das Arbeitsblatt kopiert werden sollen. Wenn Sie dieses Argument nicht angeben, werden alle Datensätze im Recordset-Objekt kopiert.
MaxColumns Optionaler Variant-Wert. Die maximale Anzahl von in das Arbeitsblatt zu kopierenden Feldern. Wenn Sie dieses Argument nicht angeben, werden alle Felder im Recordset-Objekt kopiert.
Anmerkung
Das Kopieren beginnt mit der aktuellen Zeile des Recordset-Objekts. Nach dem Kopieren hat die EOF-Eigenschaft des Recordset-Objekts den Wert True.
Beispiel
In diesem Beispiel werden die Feldnamen von einem DAO-Recordset-Objekt in die erste Zeile eines Arbeitsblattes kopiert und fett formatiert. Anschließend wird in diesem Beispiel der Datensatz in das Arbeitsblatt kopiert, beginnend mit Zelle A2.
For iCols = 0 to rs.Fields.Count - 1
ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
ws.Range(ws.Cells(1, 1), _
ws.Cells(1, rs.Fields.Count)).Font.Bold = True
ws.Range("A2").CopyFromRecordset rs
[Zitat Ende]
Leider hast Du nicht gepostet, welche Excel/Accessversionen Du verwendest - ich könnte sonst noch ein paar Bekannte anrufen, die eventuell Deine Version im Einsatz haben und um kurzes Nachgucken in der Hilfe bitten.
BTW, auf welche Art hast Du denn versucht, Dich mit Deiner Frage auseinanderzusetzen?
Grüße Biber
Supi, das war genau das was ich gesucht habe und es funktioniert auch soweit.
Jetzt stehe ich allerdings vor dem nächsten Problem.
In meinen Abfragen habe ich 2 Variable Kriterien:
"[Formulare]![Frm_ÜbersichtAuswahl]![cbo_AuswahlVergleichLand1] Oder [Formulare]![Frm_ÜbersichtAuswahl]![cbo_AuswahlVergleichLand2]"
die aus einem Formular kommen.
Beim durchführen bekomme ich dann immer Laufzeitfehler 3061, 2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergen.
Wie kann ich denn am besten die Parameter aus meinem Formular übergeben?
Ich hoffe, es kann mir jemand helfen.
Gruß Bekka
P.S. Manchmal muss man nur ein paar Nächte darüber schlafen um auf eine Lösung zu kommen. Ein einfaches Recordset genommen und im open die 2 variablen in SQL eingebaut
Jetzt stehe ich allerdings vor dem nächsten Problem.
In meinen Abfragen habe ich 2 Variable Kriterien:
"[Formulare]![Frm_ÜbersichtAuswahl]![cbo_AuswahlVergleichLand1] Oder [Formulare]![Frm_ÜbersichtAuswahl]![cbo_AuswahlVergleichLand2]"
die aus einem Formular kommen.
Beim durchführen bekomme ich dann immer Laufzeitfehler 3061, 2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergen.
Wie kann ich denn am besten die Parameter aus meinem Formular übergeben?
Ich hoffe, es kann mir jemand helfen.
Gruß Bekka
P.S. Manchmal muss man nur ein paar Nächte darüber schlafen um auf eine Lösung zu kommen. Ein einfaches Recordset genommen und im open die 2 variablen in SQL eingebaut