Access-o-Mania

Access-Forum => Tabelle/Abfrage => Thema gestartet von: BananaDealer am Dezember 11, 2017, 14:46:16

Titel: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 11, 2017, 14:46:16
Hallo Leute,

ich möchte folgendes mit einem Access-Export nach Excel erwirken:

1) Die Ergebnisse von maximal drei separaten Abfragen sollen in ein Tabellenblatt als drei verschiedene Tabellen (Formatierung soll mit exportiert werden) eingefügt werden. Es gibt drei verschiedene Messungen und diese sollen einfach ohne weitere Anforderungen nebeneinander im selben Blatt erscheinen. Die Formatierung ist zum einen wichtig für das Layout, zum anderen werden sonst die IDs der Eigenschaften und nicht die Eigenschaften (als Text) selbst exportiert.

2) Jetzt sollen nochmals zwei verschiedene Abfragen in ein anderes Tabellenblatt eingefügt werden. Wieder als separate Tabellen nebeneinander und dem Export der Formatierung.

Diese Exceldatei ist quasi zum Auswerten der in Access vorbereiteten Datensätze. Für jede Auswertung wird aber wieder eine Blanco-Datei genutzt, sprich der Export muss nicht über mehrere Auswertungen gemacht werden. Nach dem Ablauf nach Punkt 1) und 2) ist die Auswertung immer abgeschlossen.

Nach Möglichkeit eine einfache, wenn auch nicht robusteste, Lösung gesucht ::)

Danke und viele Grüße
BananaDealer
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: Beaker s.a. am Dezember 11, 2017, 15:52:12
Hallo,
Hast du dich schon mal mit der Methode "DoCmd.TransferSpreadsheet" auseinandergesetzt?
gruss ekkehard
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: steffen0815 am Dezember 11, 2017, 19:20:03
Hallo,
du solltest den Export zunächst manuell testen.
Ein "formatierter" Export (Option Formatierung) ist allerdings nicht in verschiedene Tabellen (einer Mappe) möglich sondern nur jeweils in eine neue Mappe.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 12, 2017, 14:03:57
Hallo,
Hast du dich schon mal mit der Methode "DoCmd.TransferSpreadsheet" auseinandergesetzt?
gruss ekkehard
Bis jetzt noch nicht. Ich hab den Export vor allem mit dem Assistenten gemacht und in anderen Foren aber noch kein passenden Code gefunden für einen "selbst" angefertigten Export.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 12, 2017, 14:05:39
Hallo,
du solltest den Export zunächst manuell testen.
Ein "formatierter" Export (Option Formatierung) ist allerdings nicht in verschiedene Tabellen (einer Mappe) möglich sondern nur jeweils in eine neue Mappe.

Welchen Export manuell testen? Per Assistent oder mit der Methode von Beaker (obige Antwort)?
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: steffen0815 am Dezember 12, 2017, 14:26:41
Hallo,
"manuell" bedeutet (für mich) ohne Code, also die Nutzung des Assistenten.

Btw:
"DoCmd.TransferSpreadsheet" entspricht dem unformatierten Export
"Docmd.OutPutTo"  entspricht dem formatierten Export (Export von Daten mit Formatierung und Layout)
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 09:02:58
Hallo,
"manuell" bedeutet (für mich) ohne Code, also die Nutzung des Assistenten.

Btw:
"DoCmd.TransferSpreadsheet" entspricht dem unformatierten Export
"Docmd.OutPutTo"  entspricht dem formatierten Export (Export von Daten mit Formatierung und Layout)

Super Danke Dir/Euch schon einmal für die Antworten! Die Methode für den formatierten Export kann ich im Code frei nutzen? Oder ist hier auch die Beschränkung, dass ein formatierter Export eine neue Mappe erzeugt? Könntet ihr mir für den Code zum formatierten Export etwas Hilfestellung geben? Wie und wo ich den anlege (als Makro?)
Vielen Dank!
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: Lachtaube am Dezember 13, 2017, 09:49:11
Das Nebeneinander von Exporten in ein Excel-Blatt beherrscht Access nicht. Entweder versuchst Du Dich Excel-seitig über das Menü Daten daran oder Du automatisierst das Geschehen aus Excel oder Access heraus - siehe Range.CopyFromRecordset-Methode (Excel) (https://msdn.microsoft.com/de-de/vba/excel-vba/articles/range-copyfromrecordset-method-excel)
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 10:15:36
Das Nebeneinander von Exporten in ein Excel-Blatt beherrscht Access nicht. Entweder versuchst Du Dich Excel-seitig über das Menü Daten daran oder Du automatisierst das Geschehen aus Excel oder Access heraus - siehe Range.CopyFromRecordset-Methode (Excel) (https://msdn.microsoft.com/de-de/vba/excel-vba/articles/range-copyfromrecordset-method-excel)

Alles klar, dann weiß ich Bescheid. Das Ganze über einen excelseitigen Import zu steuern, wird die beste Lösung sein. Danke!
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 11:31:24
Hallo,

dies ist der der Code bis jetzt (auch aus einem Forum, etwas angepasst):

Sub AbfrageAccess()
   
   Dim dbe As Object    ' As DAO.DBEngine
   Dim db  As Object    ' As DAO.Database      Soll als Kommentar bleiben?
  Dim rs As Object     ' AS DAO.Recordset
   Dim dbfile As String
   Dim sSQL As String
   Dim i As String

   dbfile = "\Pfad der Access Datenbank"
   'Set dbe = CreateObject("DAO.DBEngine.36")   ' Acc2000-2003
   Set dbe = CreateObject("DAO.DBEngine.120")   ' ab Acc2007
   Set db = dbe.OpenDatabase(dbfile)

   sSQL = "SELECT FeldX, FeldY FROM TabelleZ WHERE FeldX > 123" Wenn ich eine fertige Abfrage habe, brauche ich diese Zeile? Was ist eintzutragen?
   'Set rs = db.Openrecordset(sSQL)                      ' Verwendung SQL-Anweisung
   Set rs = db.Openrecordset("Meine Abfrage")   ' Verwendung gespeicherte Abfrage/Tabelle

   ' Feldnamen übernehmen
   For i = 0 To rs.Fields.Count - 1
      ' für ActiveSheet kann man auch etwas Intelligenteres einsetzen
      ActiveSheet.cells(1, i + 1) = rs.Fields(i).name
   Next

   ' Inhalt (gesamtes Recordset) übernehmen
   ActiveSheet.cells(2, 1).CopyFromRecordset rs Hier dann das gewünschte Tabellenblatt und Bereich eintragen

   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Set dbe = Nothing
   
End Sub

Die Abfrage selber hat in Access eine Parametereingabe. Wird dieses durch das Makro in Excel normal aufgerufen?

Problem zur Zeit: Ich bekomme den Fehler Typen unverträglich mit gelber Markierung in der ersten Zeile.

Vielen Dank!
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: ebs17 am Dezember 13, 2017, 12:15:43
Der gezeigte Code wäre geeignet, aus Excel heraus einen Import aus einer Accessdatenbank vorzunehmen. Oben wolltest Du aber aus Access heraus exportieren.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 12:26:48
Der gezeigte Code wäre geeignet, aus Excel heraus einen Import aus einer Accessdatenbank vorzunehmen. Oben wolltest Du aber aus Access heraus exportieren.

Genau ich habe mich nun umentschieden den Import in Excel zu machen, da dies einfacher ist (siehe Antwort von mir vor dem Code).
Es gibt die Möglichkeit in Excel über Daten -> Aus anderen Quellen -> MS Query die Abfrage zu importieren. Leider braucht die Abfrage in Access noch Parameter, die eingegeben werden müssen. Dies erzeugt im Excel-Import einen Fehler (Dass halt die Parameter noch fehlen). Ist dies zu beheben? Gerne auch sonst per VBA und ohne Assistenten.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: ebs17 am Dezember 13, 2017, 13:27:02
Zitat
da dies einfacher ist
Ich würde behaupten, es ist nicht komplexer und nicht einfacher. MS Query ist auch nur ein Assistent zum Erzeugen von Abfragen/SQL-Anweisungen, aber mit bescheidenen Möglichkeiten.
Der neue Star ab Excel 2010 ist eh Power Query. Ob der aber mit einfachen Mitteln mit Parametern umgehen kann, weiß ich nicht.

Zu den Fragen:
- Kommentare sind für jene wichtig, die den Code nicht als solchen lesen können.
- Bei einer gespeicherten Abfrage muss man nicht explizit auf deren SQL-Anweisung eingehen.
- Bei Parameterabfragen muss man auch die Parameter geeignet übergeben, siehe z.B. Parameterabfrage per VBA öffnen (http://www.donkarl.com?FAQ6.16)
Zitat
Fehler Typen unverträglich mit gelber Markierung in der ersten Zeile
Das kann ich mir bei der folgenden Zeile nicht vorstellen:
Dim dbe As Object
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 13:31:32
Ich meinte gelbe Markierung in der Sub-Zeile. Erste Zeile war etwas verwirrend, entschuldige ::)
Ich hab verschiedene Typen für die Variablen durchprobiert und bekommen entweder die Meldung, dass die Typen unverträglich oder nicht bekannt sind. Sprich As Object, As DAO.Recordset, As DAO.DBEngine, As DAO.Database und As Variant funktionieren nicht.

Das Vorgehen zu den Parametern schaue ich mir mal an. Danke!
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: ebs17 am Dezember 13, 2017, 13:39:29
As Object ... sollte bei Objekten immer funktionieren (=> Late Binding)
As DAO.DBEngine u.ä.: Wenn ich unmittelbar eine externe Bibliothek verwende (=> Early Binding), muss vorher auch ein Verweis darauf gesetzt werden, sonst ist selbstverständlich alles daraus unbekannt.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 13:49:31
Habe den Fehler gefunden... eine Laufvariable war als String deklariert ::)

Hier nun der Code mit einigen Kommentaren als Alternativ-Code:

Sub AbfrageAccess()
   
   Dim dbe As Object
   Dim dbfile As String
   Dim sSQL As String
   Dim i As Integer
   
   Dim db As Object
   Dim rs As Object
   Dim qdf As Object

   dbfile = "\Meine DB"
   'Set dbe = CreateObject("DAO.DBEngine.36")   ' Acc2000-2003
   Set dbe = CreateObject("DAO.DBEngine.120")   ' ab Acc2007
   Set db = dbe.OpenDatabase(dbfile)



  Set qdf = db.QueryDefs("AuswertungDLundMessung")
    qdf.Parameters![Welche Messung?] = InputBox("Welche Messung?")
    qdf.Parameters![Welcher DL?] = InputBox("Welcher DL?")




   
    'Set rs = qdf.OpenRecordset(dbOpenDynaset)
   'sSQL = "SELECT FeldX, FeldY FROM TabelleZ WHERE FeldX > 123"
   'Set rs = db.Openrecordset(sSQL)                      ' Verwendung SQL-Anweisung
   Set rs = db.OpenRecordset("AuswertungDLundMessung")   ' Verwendung gespeicherte Abfrage/Tabelle

   ' Feldnamen übernehmen
   For i = 0 To rs.Fields.Count - 1
      ' für ActiveSheet kann man auch etwas Intelligenteres einsetzen
      ActiveSheet.cells(1, i + 1) = rs.Fields(i).name
   Next

   ' Inhalt (gesamtes Recordset) übernehmen
   ActiveSheet.cells(2, 1).CopyFromRecordset rs

   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Set dbe = Nothing
   qdf.Close: Set qdf = Nothing
 
 
   
End Sub

Die Parameterabfrage funktioniert auch, nur bekomme ich danach einen Laufzeitfehler 3061 bzw. davor mit dem Code Set rs = qdf.OpenRecordset(dbOpenDynaset) war es der Laufzeitfehler 3001. Hat jemand da noch Ideen?

Danke
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: ebs17 am Dezember 13, 2017, 14:06:09
Set rs = db.OpenRecordset("AuswertungDLundMessung") Diesen Teil streichen, der läuft unabhängig vom qdf-Objekt und der Parametereingabe und überschreibt nur das Recordset fehlerbehaftet.

Automatisierung und Inputboxen sind grauenhafter Stil. Parameter würde man Variablen, Zellen, Userformfeldern o.ä. entnehmen. Eine Auswahl und Eingabe sollte vorher erfolgen. Da hat man dann auch Möglichkeiten zur Prüfung, ob man etwas "Gültiges" übergibt.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 14:16:08
Da bekomme ich dann Fehler 91 wegen einer Objektblock oder With-Block Variable.
Ich muss doch irgendwie mein RecordSet rs festlegen. Also Zeile streichen und dann eine andere für die Zuweisung von rs vornehmen?
Set rs = db.OpenRecordset("AuswertungDLundMessung") Diesen Teil streichen, der läuft unabhängig vom qdf-Objekt und der Parametereingabe und überschreibt nur das Recordset fehlerbehaftet.

Automatisierung und Inputboxen sind grauenhafter Stil. Parameter würde man Variablen, Zellen, Userformfeldern o.ä. entnehmen. Eine Auswahl und Eingabe sollte vorher erfolgen. Da hat man dann auch Möglichkeiten zur Prüfung, ob man etwas "Gültiges" übergibt.

Inputbox geht jetzt erst über einen String :)

Set rs = db.OpenRecordset("AuswertungDLundMessung") Den durch irgendwas ersetzen? rs wird ja sonst nicht definiert.

EDIT: Kompilieren klappt auch fehlerfrei. Nur Ausführen gibt den Laufzeitfehler nach der Eingabe der Parameter zurück.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: Lachtaube am Dezember 13, 2017, 14:27:48
Es muss nach der Parameterzuweisung Set rs = qdf.OpenRecordset() heißen.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 14:32:41
Es muss nach der Parameterzuweisung Set rs = qdf.OpenRecordset() heißen.

Danke! Endlich funktioniert es!  ;D
Nur eine Kleinigkeit noch: Das Format soll mit eingefügt werden, um als Zahlen in Access hinterlegte Eigenschaften in Textform nach Excel zu bekommen.

Edit: Ich habe eine Parameterübergabe für "Zwischen [Startdatum] und [Enddatum]" aus Access in Excel VBA mittels zwei String Variablen integriert. Nun bekomme ich nach Eingabe des Enddatums den Fehler 3265 zurück.

par1 = InputBox("Welches Stardatum?")
par2 = InputBox("Welches Enddatum?")
dbfile = "\ Meine DB"
   Set dbe = CreateObject("DAO.DBEngine.120")
   Set db = dbe.OpenDatabase(dbfile)



  Set qdf = db.QueryDefs("AuswertungGesamt")
    qdf.Parameters![Startdatum] = par1
    qdf.Parameters![Enddatum] = par2
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: ebs17 am Dezember 13, 2017, 15:54:42
Zitat
Fehler 3265
Als Mensch kann ich mit einer Textmeldung mehr anfangen, z.B. über deren Inhalt nachdenken.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 16:12:50
Zitat
Fehler 3265
Als Mensch kann ich mit einer Textmeldung mehr anfangen, z.B. über deren Inhalt nachdenken.

Hier ein Screenshot im Anhang.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: ebs17 am Dezember 13, 2017, 17:03:58
Zitat
Nun bekomme ich nach Eingabe des Enddatums den Fehler
nach ... heißt mit Inputbox-Eingabe oder 28 Zeilen später?

Programmieren hat etwas mit Präzision zu tun. So sollte man auch formulieren.

Zitat
Edit: Ich habe eine Parameterübergabe für "Zwischen [Startdatum] und [Enddatum]" aus Access in Excel VBA mittels zwei String Variablen integriert.
Den Stolz darauf kann ich nicht teilen. Ein datum würde ich mit einem Datum (Date) bedienen.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 13, 2017, 21:21:09
Zitat
Nun bekomme ich nach Eingabe des Enddatums den Fehler
nach ... heißt mit Inputbox-Eingabe oder 28 Zeilen später?

Programmieren hat etwas mit Präzision zu tun. So sollte man auch formulieren.

Zitat
Edit: Ich habe eine Parameterübergabe für "Zwischen [Startdatum] und [Enddatum]" aus Access in Excel VBA mittels zwei String Variablen integriert.
Den Stolz darauf kann ich nicht teilen. Ein datum würde ich mit einem Datum (Date) bedienen.

Ich werde morgen den Code Zeile für Zeile ausführen lassen und die Problemzeile dann nochmal posten. Aber sehr wahrscheinlich ist es die Zuweisung der Variablen and die Übergabe des Parameters nach Access.

Also sinngemäß:
param1 = InputBox....
param1 = InputBox....

Methode.Parameter1inAccess = param1
Methode.Parameter2inAccess = param2

Und die Variablen als String. Problem also bei dieser Zuweisung, da der Code danach identisch mit der ersten Abfrage ist und diese funktioniert.

Und Stolz ist mit nirgends meiner Codierungen verbunden. Eher Unsicherheit, da ich erst seit wenigen Wochen mit Excel VBA und Access arbeite. Das Statement zu den Strings war nur als Info, dass evtl. direkt jemand schreit "falsch". ;) Als Datum bekomme ich den selben Fehler zurück, soweit war ich auch schon. Ich dachte mir, dass der String dann in der Übergabe an Access eher weniger Probleme bereitet, als das Date-Format (dieses kann ja auch als Zahl in Tagen glaube um die 43000 dargestellt werden).
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: Lachtaube am Dezember 14, 2017, 01:21:48
Du solltest sicherstellen, dass die Parameter auch Datumswerte darstellen. Das Ergebnis einer Inputbox ist vom Datentyp String (also Text) und sollte zu einem Datum durch einen Ausdruck wie z. Bsp. CDate(par1) konvertiert werden. Oder Du legst par1 und par2 per Deklaration schon als Date-Variable aus, was eine Datentypkonvertierung impliziert.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 14, 2017, 09:00:24
Du solltest sicherstellen, dass die Parameter auch Datumswerte darstellen. Das Ergebnis einer Inputbox ist vom Datentyp String (also Text) und sollte zu einem Datum durch einen Ausdruck wie z. Bsp. CDate(par1) konvertiert werden. Oder Du legst par1 und par2 per Deklaration schon als Date-Variable aus, was eine Datentypkonvertierung impliziert.

Leider gibt das auch den gleichen Fehler (s.o. Screenshot) zurück.

'_____________Abfrage Stichprobenmenge____________________
 
 parD1 = InputBox("Welches Stardatum?")
 parD2 = InputBox("Welches Enddatum?")
 parD1 = CDate(parD1)
 parD2 = CDate(parD2)
 
 dbfile = "MeineDB"
   Set dbe = CreateObject("DAO.DBEngine.120")
   Set db = dbe.OpenDatabase(dbfile)

  Set qdf = db.QueryDefs("AuswertungGesamt")
    qdf.Parameters![Startdatum] = parD1
    qdf.Parameters![Enddatum] = parD2

    Set rs = qdf.OpenRecordset()
    Worksheets("Auswertung").cells(21, 19).CopyFromRecordset rs

   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Set dbe = Nothing
   qdf.Close: Set qdf = Nothing

Eins zu eins besteht dieses Code-Stück auch erneut im Makro für eine andere Abfrage (auch mit Parametern) und diese funktioniert.

Bin etwas ratlos. In Access ist das Kriterium für das Datum so gebaut: Zwischen [Startdatum] und [Enddatum]
Erzeugt das evtl ein Problem?

Ich bräuchte auch noch einen Ratschlag, wie ich das Format aus Access mit importiere per Code.

Vielen vielen Dank Euch bis hier!
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: Lachtaube am Dezember 14, 2017, 09:39:28
Wenn man das Drumherum nicht versteht, ist es immer besser, die komplette Routine zu zeigen.   'bei
   Dim parD1 As String

   'so verfahren
   parD1 = InputBox("Welches Stardatum?")
   '...
   qdf.Parameters![Startdatum] = CDate(parD1)

   '-----------
   'bei
   Dim parD1 As Date

   'so verfahren
   parD1 = InputBox("Welches Stardatum?")
   '...
   qdf.Parameters![Startdatum] = parD1
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 14, 2017, 09:52:48
Wenn man das Drumherum nicht versteht, ist es immer besser, die komplette Routine zu zeigen.   'bei
   Dim parD1 As String

   'so verfahren
   parD1 = InputBox("Welches Stardatum?")
   '...
   qdf.Parameters![Startdatum] = CDate(parD1)

   '-----------
   'bei
   Dim parD1 As Date

   'so verfahren
   parD1 = InputBox("Welches Stardatum?")
   '...
   qdf.Parameters![Startdatum] = parD1

Beide Alternativen geben wieder den selben Laufzeitfehler zurück. :-\

Hier nochmal der gesamte Code:
Sub AbfrageAccess()
   
   Dim dbe As Object
   Dim dbfile As String
   Dim i As Integer
   Dim par1 As String
   Dim par2 As String
   Dim parD1 As String
   Dim parD2 As String
   Dim db As Object
   Dim rs As Object
   Dim qdf As Object
   
   
   
   Dim x As Integer
   Dim y As Integer
   Dim z As Integer
 

   par2 = InputBox("Welcher DL?")

   dbfile = "\MeineDB.accdb"
   Set dbe = CreateObject("DAO.DBEngine.120")
   Set db = dbe.OpenDatabase(dbfile)


  Set qdf = db.QueryDefs("AuswertungDLundMessung")
    qdf.Parameters![Welcher DL?] = par2


    Set rs = qdf.OpenRecordset()
    Worksheets("Auswertung").cells(4, 1).CopyFromRecordset rs

   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Set dbe = Nothing
   qdf.Close
   Set qdf = Nothing
 
 
 '_____________Abfrage über alle DL____________________
 
 dbfile = "\MeineDB.accdb"
   Set dbe = CreateObject("DAO.DBEngine.120")
   Set db = dbe.OpenDatabase(dbfile)

  Set qdf = db.QueryDefs("AuswertungGesamt")
    qdf.Parameters![Welcher DL?] = "*"

    Set rs = qdf.OpenRecordset()
    Worksheets("Auswertung").cells(4, 11).CopyFromRecordset rs

   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Set dbe = Nothing
   qdf.Close: Set qdf = Nothing
 
 '_____________Abfrage Stichprobenmenge____________________
 
 dbfile = "\MeineDB.accdb"
   Set dbe = CreateObject("DAO.DBEngine.120")
   Set db = dbe.OpenDatabase(dbfile)

 parD1 = InputBox("Welches Stardatum?")
 parD2 = InputBox("Welches Enddatum?")

  Set qdf = db.QueryDefs("AuswertungGesamt")
    qdf.Parameters![Startdatum] = CDate(parD1)
    qdf.Parameters![Enddatum] = CDate(parD2)

    Set rs = qdf.OpenRecordset()
    Worksheets("Auswertung").cells(21, 19).CopyFromRecordset rs

   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Set dbe = Nothing
   qdf.Close: Set qdf = Nothing


 '________________________Auswertung in Excel____________________________
 
ActiveWorkbook.Worksheets("Auswertung").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Auswertung").Sort.SortFields.Add Key:=Range("B4:B1500" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Auswertung").Sort
        .SetRange Range(cells(4, 1), cells(1500, 5))
        .Header = xlGuess
        .MatchCase = True
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
 ActiveWorkbook.Worksheets("Auswertung").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Auswertung").Sort.SortFields.Add Key:=Range("K4:K1500" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Auswertung").Sort
        .SetRange Range(cells(4, 11), cells(1500, 13))
        .Header = xlGuess
        .MatchCase = True
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
 z = 0
 x = 0
 
 While x < 5
 
 Do
 
 z = z + 1
 
 If Worksheets("Auswertung").cells(z + 3, 3) = "1" Then
 Worksheets("Auswertung").cells(x + 4, 16) = Worksheets("Auswertung").cells(z + 3, 1)
 
 Exit Do
 End If
 Loop
 x = x + 1
 Wend
 
 End Sub
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: ebs17 am Dezember 14, 2017, 11:56:47
   Dim par2 As String
...
   par2 = InputBox("Welcher DL?")
...
    qdf.Parameters![Welcher DL?] = par2
Deine Umsetzung ignoriert beide Vorschläge von Lachtaube.

Nebenbei sollte man sich vielleicht noch dafür interessieren, ob das Datumsfeld in der abgefragten Tabelle tatsächlich ein Datum oder vielleicht doch Text ist sowie was denn konkret in die (unsägliche) InputBox geschrieben wird.

Zitat
    qdf.Parameters![Welcher DL?] = "*"
Das Sternchen lässt sich dann trotz aller Konvertierungskünste, die die Parameterabfrage selber vornehmen würde oder die man zusätzlich anwendet, NIE im Zusammenhang mit Date-Werten verwenden.

Statt Panikprobiererei könntest Du mal eine halbe Stunde frische Luft schnappen und dann abgekühlt und aufgefrischt von vorne anfangen.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 14, 2017, 12:40:15
Die Ausführung der Parameterübergabe für den Dienstleister klappt wunderbar.


Das Sternchen kommt bei der Datumseingabe nicht zum Einsatz (zu unterscheiden dort auch par1 und parD1) und ist accessbedingt, da dort eine Möglichkeit besteht, in Access Daten gefiltert abzufragen (aber nur für DL; hat mit dem Datum nichts zu tun). Die Eingabe des Sternchens erzeugt die Abfrage aller "DL" und wird in Excel VBA einfach nur weitergegeben, da dort immer nach allen "DL" abgefragt wird. dies funktioniert auch absolut problemfrei.
Das ganze ist aber in Access ohne Probleme (bis jetzt) implementiert.

Bei Einzelschrittausführung wird der Fehler in dieser Zeile erzeugt (und das bei allen Alternativen):
qdf.Parameters![Startdatum] = CDate(parD1)
Ich habe bereits jede vorgeschlagene Lösung ausprobiert und Lachtaubes Rat befolgt, sprich als String mit und ohne Typecast und auch als Variable mit Date-Format. Alle Alternativen erzeugen denselben Fehler (siehe Screenshot).

Ich denke du interpretierst meine Situation etwas zu dramatisch, da ich absolut keine "Panikprobiererei" walten lassen, sondern ganz gelassen verschiedene Möglichkeiten ausprobiere, welche entweder durch andere Codes aus Threads, oder eigenes Nachdenken entstehen.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: Lachtaube am Dezember 14, 2017, 13:00:35
Dann lasse Dir in einer Schleife doch einmal die erwarteten Parameternamen und den Typ anzeigen.
   Dim p

   For Each p In qdf.Parameters
      MsgBox "Name: " & p.Name & vbLf & "Type: " & p.Type
   Next
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 14, 2017, 13:15:56
Dann lasse Dir in einer Schleife doch einmal die erwarteten Parameternamen und den Typ anzeigen.
   Dim p

   For Each p In qdf.Parameters
      MsgBox "Name: " & p.Name & vbLf & "Type: " & p.Type
   Next

Komischerweise wird der Name mit [Welcher DL?] und Type mit 10 angezeigt. Das Objekt qdf wird doch aber mit der neuen Abfrage, die keine Parameter diesen Namens hat, zugewiesen. Also qdf wird gelöscht und neu zugewiesen.

Set dbe = CreateObject("DAO.DBEngine.120")
   Set db = dbe.OpenDatabase(dbfile)

 
 'parD1 = InputBox("Welches Stardatum?")
 'parD2 = InputBox("Welches Enddatum?")

'parDate1 = CDate(parD1)
'parDate2 = CDate(parD2)


  Set qdf = db.QueryDefs("AuswertungGesamt")
   
   

   For Each p In qdf.Parameters
      MsgBox "Name: " & p.name & vbLf & "Type: " & p.Type
   Next
   
   
    'qdf.Parameters![Startdatum] = parDate1
    'qdf.Parameters![Enddatum] = parDate2


    Set rs = qdf.OpenRecordset()

So richtig eingefügt? Ich habe noch etwas mit dem Typecast CDate() ohne Erfolg rumprobiert.

Danke schon einmal!
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 14, 2017, 13:30:13
Ich hab den Fehler gefunden!
Die Abfrage wurde nicht richtig aufgerufen und es hat, wie durch deinen Kontrollcode Lachtaube gezeigt, die falsche Abfrage aufgerufen, wo das Date-Format den Fehler erzeugt hat ::)

Große Entschuldigung und ein dickes Dankeschön an alle!
Jetzt klappt alles!

Nur eine Kleinigkeit hätte ich noch, sofern sich jemand findet der mir nach diesem Chaos noch helfen mag  :-\

In Access sind die Eigenschaften mit der ID als Schlüssel eingetragen. Diese werden auch in Excel importiert. Ist es möglich das Format oder nur den Textwert der Eigenschaft zu importieren, so dass echte Wörter "ankommen"?
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: Lachtaube am Dezember 14, 2017, 13:52:44
Das müsstest Du in der Abfrage durch Verknüpfung mit der/den entsprechenden Tabelle(n aufbereiten.

PS: damit der Code nicht endlos wird, könntest Du z. Bsp. eine Funktion für das Laden der Abfragedaten in ein Recordset verwenden.

Vorschlag:'optionale Parameterübergabe: Array(Array(Paramname, ParamValue), Array(...))
Private Function GetRsFromQuery(ByRef db As Object, qname As String, _
                                Optional params As Variant) As Object
   Dim p

   With db.QueryDefs(qname)
      If Not IsMissing(params) Then
         For Each p In params
            .Parameters(p(0)) = p(1)
         Next
      End If
      Set GetRsFromQuery = .OpenRecordset()
   End With
End Function

PPS: Formate musst Du in Excel selbst erstellen, weil Abfragen nur Werte liefern.
Titel: Re: Abfrage in vorhandene Excel-Datei anfügen
Beitrag von: BananaDealer am Dezember 14, 2017, 14:00:12
Das müsstest Du in der Abfrage durch Verknüpfung mit der/den entsprechenden Tabelle(n aufbereiten.

PS: damit der Code nicht endlos wird, könntest Du z. Bsp. eine Funktion für das Laden der Abfragedaten in ein Recordset verwenden.

Vorschlag:'optionale Parameterübergabe: Array(Array(Paramname, ParamValue), Array(...))
Private Function GetRsFromQuery(ByRef db As Object, qname As String, _
                                Optional params As Variant) As Object
   Dim p

   With db.QueryDefs(qname)
      If Not IsMissing(params) Then
         For Each p In params
            .Parameters(p(0)) = p(1)
         Next
      End If
      Set GetRsFromQuery = .OpenRecordset()
   End With
End Function

PPS: Formate musst Du in Excel selbst erstellen, weil Abfragen nur Werte liefern.

Alles klar, vielen Dank! Ich werde das mal ausprobieren oder alternativ in Access die Abfrage anpassen :)