Export in Excel nur bestimmte Spalten
lengaumi
Gesendet: 17.01.14 14:20
Betreff: RE: Export in Excel nur bestimmte Spalten


Member

Beiträge: 17

Karl Donaubauer - 14.01.14 12:35

Hallo, Michael!

lengaumi - 13.01.14 21:38
...
In Diesem Endlosformular habe ich 3 Filter Jahr, Monat, bezahlt. Diese können beliebig kombiniert werden.
...
Me.Filter = ...
Das "Makro exportieren" exportiert den Recordset aus dem Endlosformular - einfach die momentan angezeigten Datensätze.
Ist nur eine Ausgabe Aktion als Excel. Mehr nicht. Objekttyp: Tabelle, Objektname: Formularname.
Da müsste Objekttyp Formular sein, damit es funktioniert.

Alle Felder/Steuerelemente sind an eine Abfrage gebunden. Die Abfrage beinhaltet 2 Tabellen. 1 Tabelle Personendaten, 2 Tabelle Einkäufe der Personen 1:n Beziehung.

Im Endlosformular werden in einem weitern Feld mit der Formel Wert(DomSumme("Kosten";"Leistungen";"Produkte_ID=" & [Produkte_ID])) aus einer dritten Tabelle Zahlen addiert.

Alle 3 Tabellen stehen in Beziehung 1 Tab Personendaten 1:n 2 Tab Einkäufe 1:n Produkte.

Es geht mir nur ums Format beim Exportieren und ob man Felder "sperren" kann, damit sie nicht exportiert werden.

Naja, du kannst unliebsame Felder bzw. Steuerelemente vom Export ausnehmen, indem du sie während des Exports unsichtbar machst. Also ca.

Me!BoesesSteuerelement.Visible = False
' OutPutTo entspricht der Makroaktion AusgabeIn
DoCmd.OutputTo acOutputForm, Me.Name, acFormatXLS, "c:\Foo\Test.xls"
Me!BoesesSteuerelement.Visible = True

Formatieren kannst du so aber nix. Dafür musst du eine Abfrage exportieren. Mögliches Vorgehen:

Du erstellst eine neue Abfrage, Inhalt egal, denn sie dient nur als Behälter. Nennen wir sie hier "qryExport". Im Code machst du dann sowas:

Dim strSQL As String

' nur gewuenschte Felder im SELECT + das in eine Zahl ungewandelte DSUM-Dings
' Formularfilter als WHERE-Bedingung
strSQL = _
"SELECT Feld1, Feld2, cdbl(DSum('Kosten','Leistungen','Produkte_ID=' & Produkte_ID))" & _
" FROM (SELECT * FROM DeineFormularabfrage) WHERE " & Me.Filter

' ins Direktfenster drucken, um ggf. Fehler zu finden oder im Forum zu posten
Debug.Print strSQL

' SQL-Text der Dummy-Abfrage aendern
CurrentDb.QueryDefs("qryExport").SQL = strSQL

' Abfrage exportieren
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
"qryExport", "c:\Foo\Test.xls", True

Der Code geht beispielhaft davon aus, dass das als Zahl zu exportierende Feld das DSum-Dings ist. "DeineFormularabfrage" wäre der Name der gespeicherten Formularabfrage. Alternativ kannst du da auch den SQL-String reinbasteln.

Wenn es nicht klappt, dann schildere wo genau und poste den SQL-String aus dem Direktfenster.


Hallo Karl,
Danke mal für den Code. Ich habe den Code erfolgreich testen können. Grundsätzlich funktioniert es.
Aber: Wen über die Filter keine Auswahl stattgefunden hat, bleibt der Export leer.

Wäre das Exportieren der Datensätze, die im Augenblick (gesetzter Filter oder eben nicht) im Endlosformular angezeigt werden, auch über eine Zwischentabelle möglich und würden sich vor dem Export der Daten aus dieser Zwischentabelle auch Spalten ausblenden lassen?

Über diese Zwischentabelle wäre ja das Formatieren der Datenfelder absolut einfach. Händisch kopieren funktioniert es.
Die Z_Tab muss natürlich passende Felder besitzen.

Michael


Top of the page Bottom of the page