Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Fehler im VBA-Code, Formular-Kriterium wird nicht gelöscht oder nicht überschrieben

Frage Entwicklung VB for Applications

Mitglied: redderblock

redderblock (Level 1) - Jetzt verbinden

27.08.2012 um 16:09 Uhr, 3414 Aufrufe, 3 Kommentare

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:

01.
If IsNull(Me.Text10.Value) Then 
02.
    MsgBox "Bitte geben Sie ein Datum im Format TT.MM.JJJ an" 
03.
    Exit Sub 
04.
End If
Mein gesamter Code lautet wie folgt - Vielen Dank für euer Feedback:

01.
Private Sub Bild13_Click() 
02.
 
03.
   On Error GoTo ERR_Bild13_Click 
04.
 
05.
    Dim iCols As Integer 
06.
    Dim rs As DAO.Recordset 
07.
    Dim ws As Object 
08.
    Dim db As DAO.Database 
09.
    Dim qdf As DAO.QueryDef 
10.
    Dim Startdatum As String 
11.
                 
12.
    DoCmd.Hourglass True 
13.
             
14.
    Startdatum = Forms!Main!Text10 
15.
         
16.
    Set db = CurrentDb 
17.
    Set qdf = db.QueryDefs("FDB_Eskalationsliste_Abwicklung_1Step") 
18.
    qdf.Parameters("[Startdatum]") = Startdatum 
19.
 
20.
    'Neue Excel Datei, Arbeitsmappe und Worksheet erstellen 
21.
    Set ws = CreateObject("Excel.Application") 
22.
    ws.workbooks.Add 
23.
 
24.
    Set rs = qdf.OpenRecordset(dbOpenDynaset) 
25.
 
26.
    ' Nur was machen, wenn Daten vorhanden sind 
27.
    If Not rs.EOF Then 
28.
        rs.MoveFirst 
29.
        ' Daten nach Excel kopieren 
30.
        For iCols = 0 To rs.Fields.Count - 1 
31.
            ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name 
32.
        Next 
33.
        ws.Range(ws.Cells(1, 1), _ 
34.
            ws.Cells(1, rs.Fields.Count)).Font.Bold = True 
35.
        ws.Range("A2").CopyFromRecordset rs 
36.
    End If 
37.
  
38.
    DoCmd.Hourglass False 
39.
     
40.
    ws.Visible = True 
41.
     
42.
    Set ws = Nothing 
43.
     
44.
    qdf.Close: Set qdf = Nothing 
45.
    rs.Close: Set rs = Nothing 
46.
    Set db = Nothing 
47.
     
48.
EXIT_Bild13_Click: 
49.
    Exit Sub 
50.
 
51.
ERR_Bild13_Click: 
52.
    MsgBox "Beim Daten-Export ist ein Fehler aufgetreten." 
53.
Resume EXIT_Bild13_Click 
54.
 
55.
End Sub
Mitglied: NetWolf
27.08.2012 um 19:58 Uhr
Grüß Gott,

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 das

Folgendes war allerdings nicht erfolgreich:

01.
> If IsNull(Me.Text10.Value) Then 
02.
>     MsgBox "Bitte geben Sie ein Datum im Format TT.MM.JJJ an" 
03.
>     Exit Sub 
04.
> End If 
05.
> 

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@@

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)
Bitte warten ..
Mitglied: redderblock
28.08.2012 um 10:39 Uhr
Hallo Wolfgang,

danke erst einmal. Das löst mein Kernproblem aber immer noch nicht:

Mein zuerst eingegebenes Startdatum wird nach dem End Sub scheinbar gespeichert und auch bei einem im Formular geändertem Startdatum wieder verwendet.

Löse ich den Code erneut aus, ist das Startdatum zwar zunächst auf 00:00:00, ab Zeile 16 wird es aber auf das beim ersten Code-Durchlauf gewählte Datum gesetzt.

Das Formular-Feld habe ich als Datum formatiert, Dim Startdatum As date ist auch drin. Hourglass false war bereits in Zeile 38 vorhanden, ich habe es aber zusätzlich in Zeile 53 eingefügt.

qdf.Parameters("[Startdatum]") = Startdatum - Hier wird das Datum als Kriterium in meiner Abfrage qdf gesetzt.

Zwischenzeitlich dachte ich der Exit Sub in Zeile 49 führt dazu, dass die Variablen nicht gelöscht werden, aber ohne Error-Schleife habe ich das gleiche Problem.

ws = Nothing führt nicht dazu, dass das Startdatum gelöscht wird.

db.close anstelle Set bd nothing bringt keine Verbesserung.

Danke für eure Hilfe - ich suche immer noch nach einer Lösung.
Bitte warten ..
Mitglied: redderblock
28.08.2012, aktualisiert 29.08.2012
Die Lösung ist:

Mit einer echten Befehlsschaltfläche funktioniert's. Ich habe die Buttons leider aus Bildern gebaut und mit einem Code belegt.

Wenn man Bilder nimmt gilt:
Das Formularfeld behält solange seinen Wert, bis der Datensatz gewechselt wird.

Eine neue Eingabe bei einem Bild-Button funktioniert also, wenn man in ein anderes Feld eines Formulars geht.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
Kreuztabelle Access + VBA Code (7)

Frage von Dr.Cornwallis zum Thema Microsoft Office ...

Datenbanken
gelöst Access Report per Email versenden, hat jemand zufällig einen Code dafür(VBA) (7)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Microsoft Office
gelöst Excel-Formel oder VBA (7)

Frage von nicki01 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...