Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kein Eintrag im Textfeld WENN ....

Begonnen von Nicolo#22, Oktober 12, 2025, 09:40:05

⏪ vorheriges - nächstes ⏩

Nicolo#22

Guten Morgen
Bin heute in einer DB auf ein Problem gestoßen.
Frage:
Was muß ich wo einstellen das in einem Textfeld kein Wert eingtragen werde kann WENN .....
Aufbau:
Habe ein Formular + Unterformular.
Eine Kombibox gibt mir Möglichkeiten zur Auswahl von Daten (Kriterien).
Im Unterformular werden dann Daten eingetragen im Zusammenhang des Kriteriums aus der Kombibox.
Jetzt die Frage:
Wenn in der Kombibox das Kriterium ,,KontenID =8" gewählt wurde, dann darf im Feld ,,Betrag" im Unterformular kein Wert eingetragen werden. Eingabe verhindern durch Abblenden? Ausblenden ?
Aber nur dann wenn ,,KontenID =8" gewählt wurde, sonst müssen Eingaben erlaubt sein.
Geht sowas zu machen mit VBA? Bin leider nicht so fit damit.
Danke schön.

Bitsqueezer

Hallo,

aber sicher. Du kannst die Eigenschaft "Enabled" und die Eigenschaft "Locked" der meisten Controls verwenden. Und die kannst Du einstellen im Event "AfterUpdate" der Kombobox, wo Du die Bedingung prüfen und die Eigenschaften passend einstellen kannst.

Wenn kein Betrag drin sein darf, empfiehlt es sich, den Wert der Textbox beim Sperren auch zu löschen, da der User zuerst einen Betrag eingegeben haben könnte und dann erst die Kombobox verändert.

Gruß

Christian

Nicolo#22

Danke Christian, dachte mir das sowas möglich ist. Aber das zu formulieren ? Dabei breche ich mir alles.
Beim der Wahl von V.H in der Kombi steht noch keine Wert in "Betrag".
Es reicht mir wenn der Versuch etwas einzugeben gesperrt wäre.
Aber nur wenn V.H gewählt ist, sonst nicht.
Leider ist die DB sehr umfangreich, so das eine kleine Variante hochladen entfällt.
Müsste ne Menge löschen.

Beaker s.a.

Hallo Nicolo,

Ich finde es zwar komisch bei einer einzelnen KontenID ein Feld zu
sperren, aber so sollte es funzen
Private Sub DeinKombi_AfterUpdate()
    Me.DeinTextfeld.Enabled = Not (Me.DeinKombi = 8)
    If Not Me.DeinTextfeld.Enabled
        Me.DeinTextfeld = NULL
    End If
End Sub

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Knobbi38

Hallo Nicolo,

die Lösung von Ekkehard bezieht sich nur auf das selbe Formular, nicht jedoch auf das Unterformular. Um die Eigenschaft vom Hauptformular in einem Unterformular zu ändern, solltest du im Unterformular eine Prozedur erstellen, welche dann vom Hauptformular aus aufgerufen werden kann:
  ' im Unterformular:
  Public Sub EnableBetrag(ByVal Locked As Boolean)
    txtBetrag.Enabled = Locked
  End Sub
Diese kann du dann aus dem HF im AfterUpdate Event der Kombobox aufrufen, .z.B.:
  Private Sub cboKontoID_AfterUpdate()
    subFormControlName.form.EnableBetrag = cbool(cboKontoID = 8)
  End Sub
Die Namen der Steuerelemente musst du natürlich an deine Gegebenheiten noch anpassen.

Knobbi38

PS:
Gerade wenn du mit Access Anwendungen erstellst, solltest du dich doch mit dem Thema VBA etwas intensiver befassen.

Nicolo#22

Na ja. Zu #3
Es fängt schon damit an das es im HF kein Feld mit der Bez Betrag gibt.
Findet VBA auch nicht, weil im Unterformular.
-
zu #4
klappt auch nicht. Vermutlich unkorrekte Begriffe.
Das Kommbi heisst cmbKtoID
Die Datensatzherkunft des Kombi ist:
SELECT [TblKonten].KontenID, [TblKonten].KtoInstitut FROM TblKonten;
Das Feld im Unterformular um das es geht heisst txt.Betrag
Die KontenID um die es geht ist 8
Wo im Unterformular wird Code 1 eingetragen, welches Evemt??
Im HF da wo das Kombi drin ist, steht aber unter AfterUpdate schon ein Code.
Code 2 darin einfügen, vor EndSub?
subFormControlName.form.EnableBetrag = und dann hier wie weiter??
Sorry wenn ich nicht der Experte mit VBA bin.
Ich habe kein IT gelernt. Das was ich weiß habe ich "fast" alles irgendwo abgeschaut
und herum probiert. Auch bei diesem Spezi im Netz, mir fällt aber der Name grad net ein.
Bin ja auch net mehr taufrisch.
Aber ich bemühe mich die Dinge zu verstehen.
Bis hier DANKE

Beaker s.a.

@Nicolo#22
ZitatDas Feld im Unterformular um das es geht heisst txt.Betrag
Dann Ulrichs Code verwenden.
ZitatWo im Unterformular wird Code 1 eingetragen, welches Evemt??
Gar keins, der Status wird durch Aufruf dieser Sub vom HFo aus gesetzt.
ZitatIm HF da wo das Kombi drin ist, steht aber unter AfterUpdate schon ein Code.
Code 2 darin einfügen, vor EndSub?
Schwer zu sagen, wenn man den vorhandenen Code nicht kennt.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Nicolo#22

Dim rs As Object
    Set rs = Me.Recordset
    rs.FindFirst "KontenID = " & Me.cmbKtoID
    Me.cmbKtoID = Null

    Set rs = Nothing
    Me.FrmKostenartKontoUfo.SetFocus
    DoCmd.GoToRecord , , acLast

Knobbi38

#8
Hallo Nicolo,

so wird es schwierig mit dem Helfen. Die Grundzüge von VBA solltest du schon kennen und Namen von Steuerelementen anzupassen sind dann auch keine Problem mehr, zumindest würde man dann die gleiche Sprache sprechen.
Es gibt sicherlich gute Fachbücher zum Lernen/Nachschlagen, Videos und Online-Artikel sind zum Lernen/Nachschlagen eher weniger geeignet, weil diese immer nur ein ganz konkretes Problem behandeln, wohingegen Fachbücher eher didaktisch an das Programmieren mit Access/VBA heranführen.

Soviel einmal dazu ...
ZitatDas Feld im Unterformular um das es geht heisst txt.Betrag
Achte bitte auf gängige Namenskonventionen, sonst wird es schwierig. Ein "Feld" ist ein Elemnt eines Datensatzes innerhalb einer Tabelle und bezieht sich nicht auf ein Steuerelement. Ein Feld alleine kann nicht für eine Eingabe gesperrt werden, ein Steuerelement schon. Dann sollte man für ein Steuerelement niemals den Namen "txt.Betrag" wählen; so etwas ist absolut kontraproduktiv! 😟

Dein Codeschnipsel (#7) ergibt inhaltlich auch nicht richtig Sinn. Ganz im Gegenteil würde man einen solchen Code, wie Set rs = Nothing, nicht im AfterUpdate-Event einer Kombobox erwarten.

Zu meinem Beispiel:
Der 1. Code ist einfach nur eine Prozedur in dem Unterformular, welcher dann in einer Codezeile, wie in 2. beschrieben, aufgerufen wird, genau wie jede andere Prozedur auch.
( https://learntutorials.net/de/vba/topic/1179/prozeduraufrufe )

Wie bereits geschrieben, kann ich die von dir gewählten Namen der Steuerelemente nicht kennen; hier ist ein wenig Eigeninitiative gefragt.

Knobbi38

PS:
Hier mal nur eine kleine Auswahl:
rheinwerk-verlag suchbegriff=Microsoft+Access





Doming

Zitat von: Knobbi38 am Oktober 13, 2025, 20:07:21Ganz im Gegenteil würde man einen solchen Code, wie Set rs = Nothing, nicht im AfterUpdate-Event einer Kombobox erwarten.

Moin Knobbi,

ein paar Zeilen vorher steht doch Set rs = Me.Recordset, insofern ist das Nothing später doch nur konsequent  ;)
Man kann sich fragen, warum man rs überhaupt verwendet, zumal man nach dem Zerstören auch weiterhin mit dem Recordset arbeitet.
Ich hoffe der Programmierer hat sich dereinst beim Schreiben der Zeilen etwas gedacht...

Gruß
Doming

Nicolo#22

Nun. Was das Lernen angeht, ich bin 75 und habe nie viel mit solchen Dingen zu tun. Was ich habe, stammt zu 99% aus dem Vorgängerforum. Auch die Codes. Immer erhalten nach Fragen zu einer Lösung. Habe dabei viel gelernt.
Ob jemand mit 75 allerdings bereit ist so tief in die Programmierung einzusteigen? Ich verbringe Zeit mit wichtigeren Dingen, dazu ist das restliche Leben zu kurz. Wenn jemand nicht helfen möchte weil er der Meinung ist man soll sich
selber helfen in dem man die Sache studiert, dann ist das auch ok.
Der Codeschnipsel stammt vom einem der Experten aus dem Vorgängerforum und funktioniert tadellos.
Ich hab leider schon oft erlebt das angebotene Lösungen der >Experten dann in Folger untereinander korrigiert wurden.
Sei es durch falsche Annahmem / Mißverständnisse oder Begriffe usw. Leider ein Problem aller Foren.
Was den "Betrag" angeht, hast du Recht. Das stammt noch aus einer alten DB. Werde den Namen des Steuerelementes
ändern. Natürlich ist das "Feld" ein Textfeld im Unterformular.
Übrigends, wie oben bemerkt wurde- es gibt in der betreffenden Kombibox (Kombinatinsfeld) natürlch mehr als eine Auswahlmöglichkeit, genau 8 stck, sonst wäre das ja Quatsch.
Habe oben alle in Frage kommenden Elemente zur Hilfestellung mit Namen genannt.
Mit dem 2.Teil deines Codes hab ich Probleme, ab dem Gleichheitszeichen, dem Rest nicht.
Ich versuche jetzt mir zu helfen mit einer Msg Box mit Hinweis. Das kriege ich hin.
Die DB ist ja für mich alleine, niemand anders.
Ein gut gemeinter Rat zum lernen kann ja helfen, aber dazu braucht man kein Spezialisten Forum zu besuchen oder?

Knobbi38

@Doming

Stimmt, das hatte ich wohl übersehen. Bleibt die Frage, wofür das gut sein soll. Ich vermute mal, dass es eine Art Suchfunktion im UF sein sollte, aber so wie sie gestaltet ist, kann das ja auch nicht sein, denn das anschließende "DoCmd.GoToRecord , , acLast" macht ja alles wieder zunichte.


Hallo Nicolo,

Ich denke, dann bist du auch alt genug, um mit ein wenig sachlicher Kritik umgehen zu können. Obwohl Kritik hier etwas zu stark ausgedrückt ist, würde ich eher von Anregungen und Hinweisen zur Verbesserung sprechen. Richtig, ich gebe hier freiwillig Hilfestellungen. Wenn diese jemandem nicht gefallen, muss er sie ja nicht umsetzen oder berücksichtigen. Grundsätzlich gehe ich aber davon aus, dass alle, die sich mit einem solchen Thema beschäftigen, etwas dazulernen möchten (und seien es nur die Mitleser). Deshalb verstehe ich ein Forum immer noch als Hilfe zur Selbsthilfe und nicht als Schreibbüro, in dem man seine Wünsche äußert und erwartet, dass sie einem mundgerecht serviert werden. Dafür ist mir meine Zeit zu schade. Ich gehe jetzt einfach mal davon aus, dass das auf dich hier nicht zutrifft und dass das auch nicht deine Intuition ist. 

subFormControlName.form.EnableBetrag = cbool(cboKontoID = 8)Hier hat dich dein Gefühl, dass mit dem Gleichheitszeichen etwas nicht stimmen kann, nicht getäuscht. Es ist schlichtweg ein Überbleibsel aus einem anderen Code und kann/muss in diesem Fall gestrichen werden.
Zur Übergabe an eine Subform hatte ich zunächst an eine Property und eine Zuweisung gedacht, diese dann aber durch einen Methodenaufruf ersetzt. Dabei ist das Gleichheitszeichen im Aufruf nicht entfernt worden und jetzt natürlich fehl am Platze. Wenn du das korrigierst, müsste der Code wieder laufen und sollte ziemlich am Anfang in dem AfterUpdate Event stehen, da ja die neue Auswahl auf den Wert "8" geprüft werden soll. In dem von dir angegebenen Code wird die Kombobox wieder gelöscht, muss also davor stehen.

ZitatIch hab leider schon oft erlebt das angebotene Lösungen der >Experten dann in Folger untereinander korrigiert wurden.
Sei es durch falsche Annahmem / Mißverständnisse oder Begriffe usw. Leider ein Problem aller Foren.
Das ist nicht nur ein Problem von Foren, sondern läßt sich auch auf Lösungsvorschläge von KIs erweitern. Die angebotenen Lösungsvorschläge werden in der Regel nach bestem Wissen und Gewissen erstellt. Daher ist es wichtig, dass man einschätzen kann, ob sie für den eigentlichen Zweck nützlich sind. Dazu ist eben auch ein gewisses Maß an Grundlagenwissen erforderlich. Ohne dieses Wissen wird es schwierig, so etwas zu erkennen.


Knobbi38


Nicolo#22

Bin absolut deiner Meinung.
Nun.-
Nach erneutem Versuch:
Code im UF gesetzt.
Code im HF ohne das = Zeichen, nur (cmbKtoID=8) gesetzt.
Ergebnis: Fehler beim Kompilieren > Variable nicht gesetzt.
-
Hab das wohl noch nicht richtig verstanden.
Übrigends, danke ich sehr für deine Zeit.
Wenn du nicht magst musst du natürlich nicht mehr antworten.
Mir ist sehr bewusst das hier sowie auch im alten Forum viele Helfer tätig sind denen es Freude macht zu helfen. Verpflichtet ist niemand. Klar.
-
Wenn ich den Codeteil DoCmd.GoToRecord , , acLast weglasse springt der Cursor zum Anfang der Liste und nicht ans Ende.
Das muss ich dann manuell tun. Daher dieser Code

Knobbi38

#13
Hallo Nicolo,

ich weiß natürlich nicht, welche Variable jetzt damit gemeint sein könnte.

Hier mal eine kleine BeispielDB, vielleicht wird es dann etwas klarer, was ich eigentlich gemeint habe. Als Bonus habe ich dort auch noch eine kleine Prozedur eingebaut, welche auf den gewünschten DS positioniert.

Wenn du einfach nur auf den letzten DS positionieren möchtest, reicht ein einfaches MoveLast (bitte kein DoCmd() mehr) und das Suchen mit FindFirst kann entfallen.  Kannst ja mal damit ein wenig ausprobieren.

Knobbi38


Nicolo#22

Hallo, danke für deine Mühe. Jetzt wird klar wo die Zeile herkommt:
subFormControlName.form.EnableBetrag = cbool(cboKontoID = 8)
Der Haken an der Sache ist aber so zu vergleichen.
Ein Chefarzt erklärt einem frisch operierten Patienten was er genau gemacht hat und warum.
Alles mit rein wissenschaftlichen Begriffen etc.
Was versteht der Patient? Null.
Was ich meine ist:
VBA als solches mag eine wunderbare Möglichkeit sein Dinge zu programmieren.
Aber ist ungeeignet für den normalen Datenbank User. Mein ich.
Deine kleine DB hab ich angeschaut und die Funktion erkannt.
Aber alleine die Codes sind für mich und ich denke für jeden "Normalo" höhere Kunst.
Wer das beherrscht verdient meinen höchsten Respekt und Bewunderung.
Zum meinem Problem, möchte nicht weiter zerkleinern, weil alles schon seht unübersichtlich geworden ist.
Alles zu langatmig. Ist es so das andere Forenexperten meist in so einem Fall die Beteiligung meiden?
Nun.-
Die Zeile mit DoCmd habe ich mal ersetzt durch Move.Last. Es passiert genau das Unerwünschte.
Es wird zum allerletzten DS mit der höchsten ID gesprungen und der wird in der ersten Zeile des UF angezeigt.
Um jetzt weitere DS anzufügen bedarf es weiterer Schritte.
Das alles entfällt aber mit der DoCmD Zeile Last.
Deine Beispiel DB:
Bei Wahl der Nummer 8 werden die Nachnamen abgeblendet. Verstanden.
Nur.- in meinem UF sind noch weitere Textfelder in die Daten eingegeben werden müssen/sollen in der gleichen Zeile.
Ausserdem ist es so das bei Wahl der Kriterien 1 bis 7 andere benachbarte Textfelder als dieses Textfeld "Betrag"
abgeblendet werden sollten um eine Eingabe von Daten zu unterbinden. Das hab ich bisher nicht erkannt.
Es ist also mehr als kompliziert und kann glaube ich nicht so ohne weiteres gelöst werden.
Danke dir nochmal für die Hilfe.