Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: maxibahx am Dezember 15, 2016, 12:15:11

Titel: Nur Bestimmte Spalten eines Suchformulars nach Excel exportieren
Beitrag von: maxibahx am Dezember 15, 2016, 12:15:11
Guten Morgen zusammen,

ich brauche schon wieder etwas Unterstützung. So langsam wird es mir schon unangenehm  :o

Ich nutze ein Suchformular, dass auf einer Abfrage basiert. Mit Kombiboxen kann ich Kriterien im Suchformular auswählen und mir werden nur noch die ausgewählten Sachen in Form eines Endlosformulars angezeigt. Das funktioniert alles.

Diese gefilterten Datensätze möchte ich nun nach Excel exportieren, wobei ich aber auswählen möchte welche Spalten exportiert werden.
Der allgemeine Export fkt ja auch über eine Access Schaltfläche, die in der auswahlleiste bereits verfügbar ist.
Auch sind im Netz massig Beispiele vorhanden wie man alle gefilterten Spalten exportiert.
Das habe ich auch in VBA geschafft mit folgendem Code:

Private Sub Befehl91_Click()
    Const ExcelDateiName = "C:\TEMP\ACCESS Export.xls" ' zu erzeugende Exceldatei
    Const tmpAbfrage = "qrytemp" ' Abfrage wird automatisch erzeugt und gelöscht
    Dim sSQL As String
    Dim qdf As DAO.QueryDef
   
   ' Gesamten Formularinhalt exportieren
    sSQL = Me.RecordSource

    If Len(sSQL) = 0 Then
        MsgBox "Keine Datenherkunft"
        Exit Sub
    End If
    Debug.Print sSQL
    ' evtl. alte Abfrage löschen
    On Error Resume Next
    DoCmd.DeleteObject acQuery, tmpAbfrage
    On Error GoTo 0
    Set qdf = CurrentDb.CreateQueryDef(tmpAbfrage, sSQL)
    DoCmd.TransferSpreadsheet acExport, 8, tmpAbfrage, ExcelDateiName, True
    DoCmd.DeleteObject acQuery, tmpAbfrage
    Application.FollowHyperlink "C:\TEMP\ACCESS Export.xls"
End Sub


Um das ganze nun auf bestimmte Spalten zu beschränken, gehe ich davon aus nur den rot markierten Teil ändern zu müssen. Und zwar in die Form:

   sSQL = "SELECT * " & _
             "FROM " & Me.RecordSource & _
           " WHERE " & Me.Filter

Mit SQL kenne ich mich nicht so gut aus. Mein Ansatz nach Forensuche lautet:

    sSQL = "SELECT Region, Kategorie, Ausprägung, Wert " & _
             "FROM " & Me.RecordSource & _
           " WHERE " & Me.Filter

Dabei sind Region, ..., Wert die Felderbezeichnungen in meinem Suchformular.
Bei Ausführen erscheint der Laufzeitfehler '3075!: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'EinheitFROM Abfrage Werte auslesen WHERE! und der Debugger zeigt auf die Zeile im Vba code : Set qdf = CurrentDb.CreateQueryDef(tmpAbfrage, sSQL)


Liegt es nun an der Syntax des sSQL = ... -Ausdrucks oder spreche ich die Spalten "Region, ..., Wert" falsch an?  Oder ist es ein ganz anderes Problem ? ::)

Anbei ist auch wieder die Datenbank-Datei

Titel: Re: Nur Bestimmte Spalten eines Suchformulars nach Excel exportieren
Beitrag von: maxibahx am Dezember 15, 2016, 12:16:48
Ohh und ist im falschen Ordner gelandet. Gehört eigentlich zu den Formularen, srry
Titel: Re: Nur Bestimmte Spalten eines Suchformulars nach Excel exportieren
Beitrag von: Beaker s.a. am Dezember 15, 2016, 14:24:55
Hallo Max,
ZitatLiegt es nun an der Syntax des sSQL =
Das kannst du ganz schnell herausfinden indem du dir den String
im Direktfenster (Strg-G) ausgeben lässt:
Debug.Print sSQL

Liegt aber wohl eher am Formularbezug "FROM " & Me.RecordSource
Wenn da kein Abfragename sondern auch schon ein SQL-String
drinsteht funzt es so nicht.
gruss ekkehard
Titel: Re: Nur Bestimmte Spalten eines Suchformulars nach Excel exportieren
Beitrag von: ebs17 am Dezember 15, 2016, 15:09:19
Der SQL-String hat (ohne weiteres Zutun) folgenden Inhalt:
SELECT Region, Kategorie, Ausprägung, Wert, EinheitFROM Abfrage Werte auslesen WHERE
=> Leerzeichen vor FROM fehlt
=> unpraktische Bezeichnung der Abfrage, bei Leer- und Sonderzeichen mit eckigen Klammern maskieren oder gleich bessere Bezeichnungen verwenden
=> entweder WHERE weglassen oder Filterausdruck hinzufügen
Titel: Re: Nur Bestimmte Spalten eines Suchformulars nach Excel exportieren
Beitrag von: Lachtaube am Dezember 15, 2016, 15:27:14
Ein Listenfeld kann in der Eigenschaft Herkunftstyp den Wert Feldliste enthalten. Wenn dieses Listenfed dann auch noch mit Mehrfachauswahl (siehe gleichnamige Eihenschaft) ausgestattet wird, könnte man sich eine Feldliste für den Export zusammenbasteln und statt des Sterns (*) in den Abfragetext einsetzen.

PS: Du hast viele Baustellen offen, nach wie vor keine ordentlichen Indexe in den Tabellen, Umlaute in den fürchterlich langen Feldnamen, immer noch die überflüssige Jahrestabelle, Leerzeichen in Formular + Abfragenamen.

PS: bitte zukünftig Anhänge im 2003er-Format (wenn keine Features wie Mehrwertfelder o. ä. verwendet werden) hochladen - ich habe sonst ständig Kompatibilitätsmeldungen am Rechner und muss den Kram erst immer reimportieren.

PPS: manchmal ist es geschickter, sich benötigte Daten aus Excel über eine Datenverknüpfung zu holen, statt den umgekehrten Weg zu beschreiten - oder was willst Du mit dem reinen Datenimport in Excel erreichen?!
Titel: Re: Nur Bestimmte Spalten eines Suchformulars nach Excel exportieren
Beitrag von: maxibahx am Dezember 15, 2016, 17:38:22
Nun ja, die Kritik nehme ich natürlich auf.

Und auch existieren zugegeben mehrere Baustellen. Am Wochenende werde ich meinen gesamten gesammelten Fortschritt zusammenpacken und die DB nochmal von Grund auf neu erstellen. In diesem Schritt werde ich die von dir angesprochenen Punkte einbauen.

Datenimport werde ich auch benötigen, auch wenn ich noch nicht weiß wie. Aber von Datenverknüpfungen habe ich schonmal gehört =)

Mir ging es aber hierbei um den Datenexport. Man sucht in der Datenbank, filtert sich die gewollten Datensätze und exportiert sie zur weiteren Verarbeitung in eine Excel Datei. Manche Spalten (z.B. Kontrollkästchen oder unwichtige Spaltendaten) sollen aber nicht mit exportiert werden, insofern meine Frage in diesem Thread hier.