Hallo zusammen,
habe mich grade durch die Suche gearbeitet, leider konnte ich daraus nicht schlau werden.
Mein Problem ist das ich ein VBA Code habe mit dem ich in einem Formular, basierend auf einer Abfrage,
Datensätze filtern kann.
Klappt auch super. Nun will ich den gefilterten Datensatz per "Export"-Schaltfläche exportieren.
Hier ist mal mein zusammenkopierter Code hahah
Ich glaube das der gefilterte Datensatz in eine Variable oder Objekt gespeichert werden soll damit die Exportfunktion den Wert von dort aus übernimmt. Ich weiß aber nicht wie :-([/color
Hoffe mir kann jemand helfen und es wird nicht all zu kompliziert :-)
Option Compare Database
Private Sub Form_Load()
Me.txtVorname.SetFocus
End Sub
Private Sub cmdExport_Click()
Me.Requery
On Error GoTo Err_cmdExport_Click
Dim stDocName As String
stDocName = "abf_Schnellsuche"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, stDocName, "C:\Users\buss\Desktop\test.xls", True
MsgBox "Die Datei wurde als Excel-Datei unter C:\Users\buss\Desktop\test.xls gespeichert!!!"
Exit_cmdExport_Click:
Exit Sub
Err_cmdExport_Click:
MsgBox Err.Description
Resume Exit_cmdExport_Click
End Sub
Private Sub cmdZurückHM_Click()
DoCmd.Close
DoCmd.OpenForm "frm_Menü"
End Sub
Private Sub FilterSetzen()
Dim ctl As Control
Dim strFilter As String
Dim intkeyascii As Integer
' aktuelles Suchfeld in Variable einlesen
Set ctl = Me.ActiveControl
' Sonderbehandlung von Leerzeichen (Zeichen Nr. 32)
If intkeyascii = 32 Then
ctl = ctl & Chr(32)
' Initialisierung der Variablen
intkeyascii = 0
End If
' strFilter aus den Suchfeldern zusammenstellen (nach System von Reinhard Kraasch)
' Filter bei Nachname, Vorname und Straße nach Like x*, bei Telefon Filter nach Like *x*
' Wenn der Fokus auf dem Suchfeld ist, wird die Text-Eigenschaft abgefragt, ansonsten die Value-Eigenschaft.
If ctl.Name = "txtNachname" Then
If Len(Me!txtNachname.Text & vbNullString) > 0 Then strFilter = strFilter & " AND Nachname Like '" & Me!txtNachname.Text & "*'"
Else
If Not IsNull(Me!txtNachname.Value) Then strFilter = strFilter & " AND Nachname Like '" & Me!txtNachname.Value & "*'"
End If
If ctl.Name = "txtVorname" Then
If Len(Me!txtVorname.Text & vbNullString) > 0 Then strFilter = strFilter & " AND Vorname Like '" & Me!txtVorname.Text & "*'"
Else
If Not IsNull(Me!txtVorname.Value) Then strFilter = strFilter & " AND Vorname Like '" & Me!txtVorname.Value & "*'"
End If
If ctl.Name = "txtStraße" Then
If Len(Me!txtStraße.Text & vbNullString) > 0 Then strFilter = strFilter & " AND Straße Like '" & Me!txtStraße.Text & "*'"
Else
If Not IsNull(Me!txtStraße.Value) Then strFilter = strFilter & " AND Straße Like '" & Me!txtStraße.Value & "*'"
End If
If ctl.Name = "txtOrt" Then
If Len(Me!txtOrt.Text & vbNullString) > 0 Then strFilter = strFilter & " AND Ort Like '" & Me!txtOrt.Text & "*'"
Else
If Not IsNull(Me!txtOrt.Value) Then strFilter = strFilter & " AND Ort Like '" & Me!txtOrt.Value & "*'"
End If
If ctl.Name = "txtPLZ" Then
If Len(Me!txtPLZ.Text & vbNullString) > 0 Then strFilter = strFilter & " AND PLZ Like '*" & Me!txtPLZ.Text & "*'"
Else
If Not IsNull(Me!txtPLZ.Value) Then strFilter = strFilter & " AND PLZ Like '*" & Me!txtPLZ.Value & "*'"
End If
If ctl.Name = "txtIdentNr" Then
If Len(Me!txtIdentNr.Text & vbNullString) > 0 Then strFilter = strFilter & " AND IdentNr Like '*" & Me!txtIdentNr.Text & "*'"
Else
If Not IsNull(Me!txtIdentNr.Value) Then strFilter = strFilter & " AND IdentNr Like '*" & Me!txtIdentNr.Value & "*'"
End If
If ctl.Name = "txtSteuerNr" Then
If Len(Me!txtSteuerNr.Text & vbNullString) > 0 Then strFilter = strFilter & " AND SteuerNr Like '*" & Me!SteuerNr.Text & "*'"
Else
If Not IsNull(Me!txtSteuerNr.Value) Then strFilter = strFilter & " AND SteuerNr Like '*" & Me!txtSteuerNr.Value & "*'"
End If
If ctl.Name = "txtKNR" Then
If Len(Me!txtKNR.Text & vbNullString) > 0 Then strFilter = strFilter & " AND KNR Like '*" & Me!txtKNR.Text & "*'"
Else
If Not IsNull(Me!txtKNR.Value) Then strFilter = strFilter & " AND KNR Like '*" & Me!txtKNR.Value & "*'"
End If
If ctl.Name = "txtSVNr" Then
If Len(Me!txtSVNr.Text & vbNullString) > 0 Then strFilter = strFilter & " AND SVNr Like '*" & Me!txtSVNr.Text & "*'"
Else
If Not IsNull(Me!txtSVNr.Value) Then strFilter = strFilter & " AND SVNr Like '*" & Me!txtSVNr.Value & "*'"
End If
'Die ersten 5 Zeichen des strFilter abschneiden
strFilter = Mid(strFilter, 6)
'Filter setzen
Me.Filter = strFilter
Me.FilterOn = True
'Bei leerem Suchfeld geht der Fokus verloren, daher wieder setzen
ctl.SetFocus
'Cursor ans Ende des eingegeben Textes setzen (nach DonKarl FAQ 4.24)
ctl.SelStart = Len("" & ctl)
'Speicher freigeben
Set ctl = Nothing
End Sub
Private Sub txtIdentNr_Change()
Call FilterSetzen
End Sub
Private Sub txtKNR_Change()
Call FilterSetzen
End Sub
Private Sub txtNachname_Change()
Call FilterSetzen
End Sub
Private Sub txtOrt_Change()
Call FilterSetzen
End Sub
Private Sub txtPLZ_Change()
Call FilterSetzen
End Sub
Private Sub txtSteuerNr_Change()
Call FilterSetzen
End Sub
Private Sub txtStraße_Change()
Call FilterSetzen
End Sub
Private Sub txtSVNr_Change()
Call FilterSetzen
End Sub
Private Sub txtVorname_Change()
Call FilterSetzen
End Sub
Hallo,
mit
DoCmd.OutputTo acOutputForm, Me.Name, acFormatXLS, "c:\Temp\Test.xls"
werden die im Form gefilterten Datensätze in eine Excel-Datei exportiert.
Danke DF6GL,
soweit fuktioniert es auch. Allerdings nimmt Me.Name die Textfeldbezeichnung und die Spaltenbezeichnung.
Und exportiert diese. Siehe Anhang
Die Textfelder "txtVorname etc" sollten nicht mit exportiert werden. :-)
Hallo,
naja, von diesen Sonderwünschen hast Du nicht erwähnt.
Es bleibt dann nur, eine Abfrage dynamisch zusammen zu stellen , die die nötigen Felder (evtl. mit Aliasnamen) selektiert und mit dem Filterkriterium des Forms als Where-Condition (bzw. die Parameters-Section der Abfrage zu nutzen) die gewünschten DS aus der Tabelle filtert.
Diese Abfrage kann dann mit Transferspreadsheet in eine xls-Datei exportiert werden.
ooookay,
dann versuch ich mich mal damit. Danke dir.
Hallo DF6GL,
habe mich jetzt wirklich lange mit der Thematik rum geschalgen und es leider nicht geschafft.
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, "abf_Bearbeiten", _
Application.CurrentProject.Path & "\DatenExport.xlsx", True
Mit dieser Methode bekomme ich folgenden Fehler: Zirkelbezug durch 'abf_Bearbeiten' verursacht.
wenn ich statt der Abfrage eine Tabelle nehme, funktioniert der Export.
deinen Vorschlag von oben konnte ich nicht umsetzen. :-(
Hallo,
Du hast ein berechnetes Feld wie ein Tabellenfeld benannt.
Der Fehler wird in der Abfrage verursacht, der oben gezeigte Code ist daher nebensächlich. Zeige besser die Abfrage (SQL).
SELECT tbl_Master.Anrede, tbl_Master.Titel, tbl_Master.Vorname, tbl_Master.Nachname, tbl_Master.Name1, tbl_Master.Name2, tbl_Master.Straße, tbl_Master.PLZ, tbl_Master.Ort, tbl_Master.Geburtstag, tbl_Master.Telefon, tbl_Master.[E-Mail], tbl_Master.IdentNr, tbl_Master.SteuerNr, tbl_Master.KNR, tbl_Master.[SV-Nr], tbl_Master.[Dokumenten-Nr], tbl_Master.EHZ, tbl_Master.KNZ, tbl_Master.Bemerkungsfeld, tbl_Master.Status_ID, tbl_Status.Status, tbl_Master.AufSt_ID, tbl_Auftrag.Auftragsnr, tbl_Auftrag.Kammernr, tbl_Auftrag.Quartal, tbl_Auftrag.Dienstleistung
FROM tbl_Status INNER JOIN (tbl_Auftrag INNER JOIN (tbl_Auftragsstatus INNER JOIN tbl_Master ON tbl_Auftragsstatus.AufSt_ID = tbl_Master.AufSt_ID) ON tbl_Auftrag.Aufttrags_ID = tbl_Master.Auftrags_ID) ON tbl_Status.Status_ID = tbl_Master.Status_ID
ORDER BY tbl_Master.Vorname;
das ist die SQL-Abfrage
die aus zwei Tabellen die in einer 1:n Beziehung stehen erstellt wurde.
Hallo,
und bei dieser Abfrage kommt Fehlermeldung "Zirkelbezug"?
Ansonsten werden die Felder und die Überschriften auch nur genau so exportiert, wie sie im SQL-String auftauchen. Wenn die Überschriften anders benannt werden sollen, müssen Alias-Namen verwendet werden.
Bist Du zudem sicher, alle diese Daten exportieren zu wollen?
Hallo DF6GL,
genau so ist es, bei dieser Abfrage kommt die besagte Fehlermeldung.
Aiasnamen hatte ich versucht. Damit hat es auf funktioniert.
ja ich muss leider alle genannten spalten exportieren.
Hallo,
ich sehe 4 Tabellen...
ZitatON tbl_Auftrag.Aufttrags_ID =
ist dies korrekt?
Was passiert, wenn die Abfrage im Abfrageentwurf ausgeführt wird?
Verzichte zudem auf Sonder- und Leerzeichen in Namen (hier speziell das Minus-Zeichen)
Auch möglich: Transferspreadsheet, bzw. Excel kommt mit diesen Sonderzeichen in den Überschriften nicht klar.
Alles klar, werde ich berückdichtigen.
ja es sind 4 Tabellen. ON tbl_Auftrag.Aufttrags_ID = das tt ist ein Tippfehler und wurde auch so überall übernommen. Sollte nicht daran liegen.