Fehler im VBA-Code, Formular-Kriterium wird nicht gelöscht oder nicht überschrieben
Hallo zusammen,
mein Code soll das Datum aus einem Formularfeld als Kriterium in eine Abfrage einsetzen und das Abfrageergebnis dann in Excel ausgeben. Das klappt auch beim ersten Durchgang, aber beim zweiten Versuch mit anderem Startdatum erhalte ich weiterhin das alte Ergebnis. Ich habe das Startdatum "überwacht", es bleibt konstant auf dem zuerst eingegebnenen Wert, bis ich Access neu starte.
Des weiterem habe ich das Gefühl, dass ich aus dem DoCmd.Hourglass nicht mehr rauskomme, wenn ein Fehler auftritt, obwohl ich ein "On Error go To" definiert habe.
Optimal wäre es, wenn bei fehlerhafter Angabe des Datum im Formular ein Fehler erscheinen würde.
Folgendes war allerdings nicht erfolgreich:
Mein gesamter Code lautet wie folgt - Vielen Dank für euer Feedback:
mein Code soll das Datum aus einem Formularfeld als Kriterium in eine Abfrage einsetzen und das Abfrageergebnis dann in Excel ausgeben. Das klappt auch beim ersten Durchgang, aber beim zweiten Versuch mit anderem Startdatum erhalte ich weiterhin das alte Ergebnis. Ich habe das Startdatum "überwacht", es bleibt konstant auf dem zuerst eingegebnenen Wert, bis ich Access neu starte.
Des weiterem habe ich das Gefühl, dass ich aus dem DoCmd.Hourglass nicht mehr rauskomme, wenn ein Fehler auftritt, obwohl ich ein "On Error go To" definiert habe.
Optimal wäre es, wenn bei fehlerhafter Angabe des Datum im Formular ein Fehler erscheinen würde.
Folgendes war allerdings nicht erfolgreich:
If IsNull(Me.Text10.Value) Then
MsgBox "Bitte geben Sie ein Datum im Format TT.MM.JJJ an"
Exit Sub
End If
Mein gesamter Code lautet wie folgt - Vielen Dank für euer Feedback:
Private Sub Bild13_Click()
On Error GoTo ERR_Bild13_Click
Dim iCols As Integer
Dim rs As DAO.Recordset
Dim ws As Object
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim Startdatum As String
DoCmd.Hourglass True
Startdatum = Forms!Main!Text10
Set db = CurrentDb
Set qdf = db.QueryDefs("FDB_Eskalationsliste_Abwicklung_1Step")
qdf.Parameters("[Startdatum]") = Startdatum
'Neue Excel Datei, Arbeitsmappe und Worksheet erstellen
Set ws = CreateObject("Excel.Application")
ws.workbooks.Add
Set rs = qdf.OpenRecordset(dbOpenDynaset)
' Nur was machen, wenn Daten vorhanden sind
If Not rs.EOF Then
rs.MoveFirst
' Daten nach Excel kopieren
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
End If
DoCmd.Hourglass False
ws.Visible = True
Set ws = Nothing
qdf.Close: Set qdf = Nothing
rs.Close: Set rs = Nothing
Set db = Nothing
EXIT_Bild13_Click:
Exit Sub
ERR_Bild13_Click:
MsgBox "Beim Daten-Export ist ein Fehler aufgetreten."
Resume EXIT_Bild13_Click
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 190258
Url: https://administrator.de/forum/fehler-im-vba-code-formular-kriterium-wird-nicht-geloescht-oder-nicht-ueberschrieben-190258.html
Ausgedruckt am: 10.01.2025 um 05:01 Uhr
3 Kommentare
Neuester Kommentar
Grüß Gott,
Eine Variable kann drei Zustände haben:
- mit Daten gefüllt (z.B. 12.06.2012, oder auch nur die Trennpunkte xx.xx.xx)
- keine Daten (z.B. "" ohne etwas zwischen den Anführungsstrichen)
- oder NULL (nichts, rein gar nichts)
Du prüfst auf NULL und wirst bei einem Datum i.d.R. immer die Punkte haben, also eine Information (wenn auch kein Datum).
Übersetzte NULL ins deutsche mit "Nichts".
Wichtig ist die Feldtyp-Definition als Datum. Dann kannst du mit isDate() prüfen, ob es sich um ein Datum handelt.
nö, ein Datum ist ein Datum und kein String!!!
Dim Startdatum As date
Tipp: wenn diese SUB im Formular läuft, reicht ein Me.Text10
'erst mal zum Ende, dann zurück zum Anfang
rs.MoveLast
'hiermit machst du sie zu!?
btw warum nutzt du nicht die Funktion Transferspreadsheed? Ist doch viel einfacher....
Grüße aus München
Wolfgang
(Netwolf)
Des weiterem habe ich das Gefühl, dass ich aus dem DoCmd.Hourglass nicht mehr rauskomme, wenn ein Fehler auftritt, obwohl ich ein "On Error go To" definiert habe.
und wo steht da, dass Hourglass = False ist? Hellsehen kann Access nicht Optimal wäre es, wenn bei fehlerhafter Angabe des Datum im Formular ein Fehler erscheinen würde.
nichts leichter als dasFolgendes war allerdings nicht erfolgreich:
> If IsNull(Me.Text10.Value) Then
> MsgBox "Bitte geben Sie ein Datum im Format TT.MM.JJJ an"
> Exit Sub
> End If
>
Eine Variable kann drei Zustände haben:
- mit Daten gefüllt (z.B. 12.06.2012, oder auch nur die Trennpunkte xx.xx.xx)
- keine Daten (z.B. "" ohne etwas zwischen den Anführungsstrichen)
- oder NULL (nichts, rein gar nichts)
Du prüfst auf NULL und wirst bei einem Datum i.d.R. immer die Punkte haben, also eine Information (wenn auch kein Datum).
Übersetzte NULL ins deutsche mit "Nichts".
Wichtig ist die Feldtyp-Definition als Datum. Dann kannst du mit isDate() prüfen, ob es sich um ein Datum handelt.
Mein gesamter Code lautet wie folgt - Vielen Dank für euer Feedback:
@@--Dim Startdatum As String@@
@@--Dim Startdatum As String@@
nö, ein Datum ist ein Datum und kein String!!!
Dim Startdatum As date
Startdatum = Forms!Main!Text10
Das Feld Forms!Main!Text10 ist hoffentlich als Datum auf dem Formular formatiert!!Tipp: wenn diese SUB im Formular läuft, reicht ein Me.Text10
qdf.Parameters("[Startdatum]") = Startdatum
Was soll diese Anweisung? Bitte beschreibe die Funktion mal ganz genau.'erst mal zum Ende, dann zurück zum Anfang
rs.MoveLast
rs.MoveFirst
ws.Visible = True
'warum? Set ws = Nothing
'wird doch hier gelöscht! qdf.Close: Set qdf = Nothing
qdf.Close reicht vollkommen rs.Close: Set rs = Nothing
rs.Close reicht vollkommen Set db = Nothing
'wirklich? du hast vorher mit Set db = CurrentDb geschrieben = nutzte die aktuelle Datenbank, die gerade offen ist.'hiermit machst du sie zu!?
ERR_Bild13_Click:
'kein Hourglass = false 'so wird das nichts mit dem Nachbarn btw warum nutzt du nicht die Funktion Transferspreadsheed? Ist doch viel einfacher....
Grüße aus München
Wolfgang
(Netwolf)