Office: (Office 2013) Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...)

Helfe beim Thema Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...) in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Guten Abend liebe Forumsmitglieder Ich habe ein Kombinationsfeld Namens: "KatFKAuswahl" wo ich eine Liste an Auswahlmöglichkeiten in einem Formular... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von pubbl, 21. November 2015.

  1. Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...)


    Guten Abend liebe Forumsmitglieder

    Ich habe ein Kombinationsfeld Namens: "KatFKAuswahl" wo ich eine Liste an Auswahlmöglichkeiten in einem Formular (Namens: frm_Personen) habe.
    Damit man eine Auswahl treffen kann, muss normalerweise immer zuerst der Personen-Datensatz gespeichert werden, sonst kommt ein Laufzeitfehler (3021 - kein aktueller Datensatz ... und Access wird blockiert). Dies wird durch den VBA Code hinter dem KombiFeld bewirkt.

    Da ich keine Fehlermeldungen "unterdrücken" möchte, dachte ich mir, könnte man das Problem folgendermassen vermeiden:
    Beim Mausklick auf das KombiFeld-Element soll erst geprüft werden, ob in der Tabelle tbl_Personen oder im Formular frm_Personen ein "gespeicherter" Datensatz (PersID, Vorname, Nachname) vorhanden ist - wenn nicht, soll er das besagte Auswahlfeld im Formular blockieren und gleichzeitig nachfragen, ob die eingegebenen Personendaten gespeichert werden sollen. Wenn dann "OK" gedrückt wird, soll dies das Speichern des Datensatzes - in tbl_Personen - bewirken und das KatFKAuswahl-KombiFeld
    soll wieder freigegeben werden - erst dann kann eine Auswahl im KombiFeld getroffen werden.
    Wenn das Formular noch gar keine Eingaben (PersID, Vorname, Nachname) enthält, soll der Fokus auf das Formular-Feld "Vorname" gelenkt werden (inkl. MsgBox das zuerst Personen-Pflicht-Daten eingetippt werden müssen.)
    - Dann müsste man erst die Pflichtfelder befüllen! Danach erst kann man erneut versuchen auf das KombiFeld zu klicken.

    Wenn der "aktuelle" Personen-Datensatz in der Tabelle bereits schon existiert, soll das KombiFeld gar nicht erst blockiert werden und man kann sofort eine Auswahl treffen.


    im Stil etwa:

    Private Sub KatFKAuswahl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If .....
    .....
    KatFKAuswahl.Locked = True
    MsgBox("Person muss zuerst abgespeichert werden - OK ?", vbYesNo) = vbYes
    .....
    DoCmd.RunCommand acCmdSaveRecord ...
    .....
    End If
    KatFKAuswahl.SetFocus
    End Sub


    Mein VBA Kenntnisse reichen leider noch nicht aus um mit "Ausprobieren" zu einer sauberen Lösung zu kommen ... deshalb bitte ich die Profis um ein wenig Unterstützung.
    Habt vieeelen Dank!

    :)
     
  2. Moin,
    dazu sollte es eigentlich reichen zu prüfen, ob das Feld PersID im Formular einen Wert hat. Ereignisse wären dann Form_Current, Vorname und Nachname AfterUpdate), Code:
    Code:
    maike
     
  3. Guten Morgen Maike

    Sorry dass ich erst jetzt antworte gestern langte es nicht mehr.
    Danke für die Unterstützung
    Der Vorschlag funktioniert nur teilweise ... da Platz im AfterUpdate Ereignis für dieses Feld bereits doppelt reserviert ist und das ganze etwas schwieriger macht. Man kommt fast nicht um eine Fehlermeldung herum.
    Ich habe es jetzt beim GotFocus-Ereignis versucht.

    Momentan ist auch das Problem wenn das Feld einmal deaktiviert wurde (siehe obigen Code) wird es nicht wieder freigegeben obwohl ich die Personendaten speichere (ebenfalls mit VBA-Befehlsschaltfläche im Formular).... wie kommt das?

    Hier der Code hinter dem Combi-Feld: Momentan ist es die Zeile DoCmd.RunSQL "INSERT INTO ... wo es stockt.

    Code:
     
  4. Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...)

    Hallo!

    Code:
    Was bezweckst du mit diesem Code?

    mfg
    Josef
     
    Josef P., 23. November 2015
    #4
  5. Hallo Josef dieser Code wird verwendet um Daten, welche man zuvor in der Kombinationsfeld-Liste (im HFO) ausgewählt hat in einem unterformular (endlosformular) darzustellen. Dieses ist wiederum in meinem Hauptformular eingebunden. Mehrfachwerte sind möglich... (KGPID ist ein Autowert aus tbl_KatGruppePersonen welcher auch im ufo_KatGruppePersonen auftaucht) Der Bookmark funktioniert eigentlich tadellos. Stimmt etwas mit dem Code nicht?
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  6. Für mich sieht die Reihenfolge etwas eigenartig aus.
    Bist du sicher, dass der Datensatzzeiger in Me.RecordsetClone nach dem Requery immer noch auf dem zuvor über Me.RecordsetClone.FindFirst gesuchten Datensatz steht?

    Ich hätte das so geschrieben:
    Code:
    ..eigentlich hätte ich es so geschrieben: *wink.gif*
    Code:
    Die Hilfsfunktion RequeryForm enthält den Aktualisierungscode und kann mehrfach verwendet werden.


    BTW:
    Verwende statt DoCmd.RunSQL lieber CurrentDb.Execute. Dann brauchst du keine Warnungen ignorieren und kannst dafür im Fehlerfall eine Fehlerbehandlung anspringen lassen.

    Code:
    mfg
    Josef
     
    Josef P., 23. November 2015
    #6
  7. Vielen Dank Josef!
    Das werde ich gleich mal austesten ... die alte Variante führte immer mal wieder zu Blockaden bzw. Fehlermeldungen.
    ...dauert einen Augenblick
     
  8. Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...)

    Ich hab gerade Lust auf Refactoring. *Smilie

    1. Schritt: Code-Struktur geändert, damit keine If-Verschachtelung vorkommt.
    (Restlicher Code ist unverändert, nur 2 Kommentare ergänzt)
    Code:
    Wenn du willst, führen wir gemeinsam ein paar weitere Refactoring-Schritte durch.
    Mögliche Beispiele:
    * Makro-Aufrufe (DoCmd) durch "richtigen" *biggrin.gif* Code ersetzen
    * Bookmark-Block überarbeiten
    * Hilfsfunktionen für wiederkehrende Aufgaben verwenden.

    Such dir einfach etwas aus und mach einen Vorschlag bzw. zeige die Stelle, die dir als überarbeitungswürdig auffällt. *Smilie

    mfg
    Josef
     
    Josef P., 23. November 2015
    #8
  9. Hallo Josef

    Dein Beispiel in #6 funktioniert ohne Probleme
    (bei der verkürzten Variante allerdings meldet sich der Debugger)

    Was ich gerne wissen würde ist weshalb
    Application.Echo False (Bildschirmflackern) zu Problemen bei Fehlermeldungen führen kann.

    Das mit If Err = 3159 ... hast du ebenfalls erfasst - Ja, es funktionierte tatsächlich nie. Eigentlich könnte man es auch entfernen.

    Selbstverständlich bin ich daran interessiert wie man die Makro-Aufrufe (DoCmd) durch "richtigen" Code ersetzt! *wink.gif*

    Was sind die Hilfsfunktionen für wiederkehrende Aufgaben?

    Herzlichen Dank!
     
  10. Bei welcher verkürzten Variante? Meinst du RequeryForm Me.ufo_KatGruppePersonen.Form, "KGPID", MerkID?
    .. diese Funktion müsstest du zuerst erstellen. *wink.gif*
    Wenn du aber dann diese Funktion verfügbar hast, ist das Aktualisieren nur noch eine Zeile im restlichen Code.

    Einfacher Test (Bitte in einer Test-Db durchführen):
    Code:
    Was wird nach der Fehlermeldung passieren?

    mfg
    Josef
     
  11. Ach so ist das ... betr.#6

    Es kommt eine Fehlermeldung "Laufzeitfehler '11' Division durch Null"
    Access wird blockiert!
    Denkst Du, mann soll wegen möglicher "Blockaden" Application.Echo False generell vermeiden ?
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  12. Application.Echo False schaltet die Bildschirmaktualisierung im ganzen Access-Fenster ab.
    Für deinen Fall ist es bessen, wenn du nur FormReferenz.Painting = False verwendest.
    Außerdem: sobald so etwas im Code steht, gehört eine Fehlerbehandlung in die Prozedur, damit man das im Fehlerfall wieder aufheben kann.


    Prinzip:

    Code:
     
  13. Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...)

    Hallo, wollte noch melden, dass Der "umgebaute" Code bisher tadellos funktioniert! Ganz herlichen Dank!
    Betr. dem Bildschirmflackern tönt Dein Vorschlag sehr sinnvoll.
    .....
    hoppla! hab grad selbst bemerkt das es me.painting schon längere Zeit gibt .... deshalb hab ich diese unnötige Frage entfernt.
    .....
     
  14. Um nochmals auf meine ursprüngliche Frage zurückzukommen ... (#1)
    momentan sieht's bei mir so aus:

    Code:
    Es funktioniert jedoch nur teilweise zufriedenstellend.
    Wenn die Textfelder ausgefüllt wurden und die IDPers (Autowert) generiert wurde (jedoch ohne den PersonenDatensatz vorgängig abzuspeichern) dann kommt man beim Versuch aus dem Kombi-Feld etwas anzuwählen - logischerweise - immer noch zu einer Fehlermeldung. 3134 - Syntaxfehler in der INSERT INTO Anweisung...
    Weiss jetzt nicht so recht wie dies elegant zu lösen ist.

    Wäre froh um paar Anhaltspunkte
    Vielen Dank
     
  15. Hast du denn den Befehl
    Code:
    auch in den AfterUpdate-Ereignissen der Felder Vorname und Nachname eingebaut?
    Was ergibt ein Debug.Print des sql-statements im Direktfenster?
    Code:
    maike
     
Thema:

Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...)

Die Seite wird geladen...
  1. Kombinationsfeld sperren od. freigeben wenn Bedingungen erfüllt (if then else ...) - Similar Threads - Kombinationsfeld sperren freigeben

  2. Dropdownfeld in Word Formular

    in Microsoft Word Hilfe
    Dropdownfeld in Word Formular: Hallo, ich arbeite an einem Word Formular wo ich einige Dropdownfelder mit Ja/Nein einfügen möchte. Ich will, dass standardmäßig Nein ausgewählt ist und der User zwischen ja und nein wählen...
  3. Kombinationsfelder und Listeneinträge

    in Microsoft Access Hilfe
    Kombinationsfelder und Listeneinträge: Hallo in die Runde, ich fange gerade an, Access zu erforschen und möchte eine Art digitalen Aktenschrank erstellen. Folgenden Workflow möchte ich erreichen: 1. im Kombinationsfeld wird ein...
  4. Kombinationsfeld in Abhängigkeit

    in Microsoft Access Hilfe
    Kombinationsfeld in Abhängigkeit: Hallo zusammen, obwohl dieses Thema schon behandelt wurde, komme ich leider nicht mit den vorherigen Lösungen weiter. Ich versuche eine Auswahl in Abhängigkeit zu erstellen. Ich möchte, dass mir...
  5. Kombinationsfelder gleichzeitig auf "Wert 1" rücksetzen

    in Microsoft Excel Hilfe
    Kombinationsfelder gleichzeitig auf "Wert 1" rücksetzen: Hallo zusammen, ich habe ein Formular mit mehreren Kombinationsfeldern erstellt. Die ausgewählten Werte generieren eine Liste - daher muss die Datei gespeichert werden. Beim erneuten Öffnen der...
  6. Automatische Auswahl in einem Kombinationsfeld durch die Auswahl in einem Anderen

    in Microsoft Access Hilfe
    Automatische Auswahl in einem Kombinationsfeld durch die Auswahl in einem Anderen: Hallo miteinander, entschuldigt der lange Titel, ich wusste nicht wie ich das nennen sollte. Mein Problem ist folgendes: Ich habe ein Formular mit Kunden und Produkten. Ich kann in einer ListBox...
  7. Office 365 Acc. gebundenes Kombinationsfeld

    in Microsoft Access Hilfe
    Office 365 Acc. gebundenes Kombinationsfeld: Hallo, wo ist der Assistent hingekommen welcher mir ein Kombinationsfeld in einem Unterformular ermöglicht, dass auf eine Haupttabelle zugreift und den ausgewählten Wert in der jeweiligen...
  8. Kombinationsfeld sperren/deaktivieren

    in Microsoft Access Hilfe
    Kombinationsfeld sperren/deaktivieren: Hallo, In einem Formular befindet sich u.a. ein gebundenes Feld "Type" und ein gebundenes Kombinationsfeld "IDNameFK". Abhängig von der Eingabe in das Feld "Type" wird das Kombinationsfeld...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden