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.
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
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.
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
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.
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
@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.
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
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 (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 (https://www.rheinwerk-verlag.de/suche/?suchbegriff=Microsoft+Access)
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
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?
@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
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
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
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.
Hallo Nicolo,
du hast mit der BeispielDB nun ein Grundgerüst, wo du das ein oder andere ausprobieren kannst, ohne deine eigentliche DB antasten zu müssen. Was das Ausblenden oder sperren der Eingabe betrifft, könntest du analog wie bei der Sub Enable... vorgehen und z.B. die ausgewählte ID übergeben. Im UF würde man dann diese ID mit einem Select Case auswerten und entsprechend die Einstellungen vornehmen. Das Prinzip sollte ja jetzt bekannt sein.
ZitatEs 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.
Ich weiß nicht genau, was du da eigentlich vor hast. In #12 beschreibst du das etwas anders. Auch kann ich jetzt keinen Unterschied in der Wirkungsweise zwischen deinem Beispielcode und dem Code in der BeispielDB erkennen. Um dir dabei helfen zu können, fehlen mir anscheinend noch ein paar Informationen.
ZitatVBA als solches mag eine wunderbare Möglichkeit sein Dinge zu programmieren.
Aber ist ungeeignet für den normalen Datenbank User. Mein ich.
Access ist ein Tool zum erstellen von Datenbankanwendungen und das Unterstützt mit seinen eingebauten Assistenten und spezialisierten Steuerelementen dabei. Für den Rest und die "Feinarbeit" ist die Programmiersprache VBA vorgesehen und damit unabdingbar. Makros spielen dabei eine eher untergeordnete Nebenrolle aus "alten Zeiten". Wenn man in den durch die Assistenten vorgegeben Datenfluss eingreifen und an seine Bedürfnisse anpassen möchte, sind VBA Kenntnisse gefordert, da wird man nicht drumherum kommen. Es müssen ja nicht gleich professionelle Ansprüche daran gestellt werden, aber es ist dann schon ein ambitioniertes Hobby, für das man auch einige Zeit investieren muß. Die Lernkurve ist schon ein ganz andere als z.B. bei Excel und hat eigentlich mit einem "normalen" User nichts zu tun.
Knobbi38
@UlrichZitatDas Prinzip sollte ja jetzt bekannt sein.
Vermutlich nicht.
@Nicolo
ZitatNur.- 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.
Da kommen bei mir ernste Zweifel an der Korrektheit des Datenmodells auf. Poste doch
bitte mal ein Bild des Beziehungsfensters mit alle Tabellen und allen Feldern sichtbar.
gruss ekkehard
Hallo, danke für eure große Mühe mir zu helfen. Das vorab.
Ich hab inzwischen die erforderlichen VBA Codes analog zur sample.db angepasst und in meine DB eingefügt.
Die sample.Db bzw. die Codes dort machen allerdings etwas anderes das was ich beabsichtige.
Es werden in einer "Adressdatei" die Nachnamen abgeblendet, wenn Nr.8 in der Kombibox gewählt wird.
Ich hatte etwas anderes im Sinn. Ähnlich aber anders.
Ich versuche es mal zu beschreiben.
Das Frm hat die Teile HF und ein UF.
Im HF Detailbereich ist ganz oben das Kombifeld. Es hat 8 Einträge.
Im unteren Teil ist das UF. mit den Datensätzen bestehend aus Textfeldern und 2 Kombiboxen.
Wähle ich jetzt z.B. die Nr.8 (KontenID) dann werden im UF nur die Daten gelistet die dazu gehören.
Gleichzeitig wird der letzte vorh. DS angezeigt, darunter die Zeile für eine neue Eingabe.
Damit werden also neue DS immer den jeweiligen Konto zugeordnet.
Je nach Auswahl in der Kombibox sind das immer Daten die zum jeweilgen Konto gehören.
Das ist grob die Funktionsweise dieses Frm.
Ausgewertet werden die Daten natürlich in anderen speziellen FRM basierend auf passenen Qry.
Mein Ziel war es jetzt:
Wenn ich in der Kombibox die 8.Position wähle, dann sollte in den erscheinden UF Zeilen (Datensätze) nur
das Textfeld BETRAG abgeblendet werden, so das nicht da eingetragen werden kann.
Aber die bisherige Funktion das zum letzten DS gesprungen wird muss erhalten bleiben.
Der Code dazu steht in #7 weiter oben ebenfalls unter After Update. Das macht es pikant.
Ebenso sollen KEINE Textfelder abgeblendet werden wenn etwas anders als 8 gewählt wird (1-7)
Dazu ist dann ggfs. später noch Arbeit nötig, weil dann andere Textfelder abgeblendet werden sollen.
-
Nachdem ich ich die Codes von Knobbi38 entsprechend angepasst eingetragen habe kommt "Laufzeitfehler"
Die Codes vertragen sich nicht.
Datenmodell? Das ist schon alles für meine Bedürfnisse ok und funktioniert seit mehreren Jahren top.
Die Tabellen sind korrekt mit allen Verknüpfungen, auch mit referentieller Integrität.
-
Nur meine Idee mit dem Abblenden des Textfeldes ist jetzt neu.
Ich hoffe die Beschreibung ist nicht zu wirr. Hört sich vielleicht konfus an.
Funktioniert aber bisher tadellos nach Wunsch.
Betone, es handelt sich hier um eine rein private Datenbearbeitung, nix professionelles.
Hallo Nicolo,
wie wäre es denn, wenn du eine abgespeckte, anonymisierte Beispiel DB hier hochlädst, mit genau diesen beiden Formularen HF und UF, so daß man die Funktionalität erkennen kann?
Das würde es etwas einfacher machen.
Gruß Knobbi38
Hallo Nicolo,
ZitatAber die bisherige Funktion das zum letzten DS gesprungen wird muss erhalten bleiben.
Das hatten wir dir ja gezeigt, passt dir aber nicht. Da stellt sich doch
die Frage, welcher DS bei dir der letzte sein soll.
Bei Access ist der Letzte immer abhängig von der ausgewählten Menge und
der Sortierung. Das gilt auch für die anderen Move-Methoden. Um auf einen
bestimmten DS zu positionieren ist die FindFirst-Methode des RS m.E.
die sicherere.
ZitatDas ist schon alles für meine Bedürfnisse ok und funktioniert seit mehreren Jahren top.
Das liest man hier oft, - kann aber trotzdem falsch sein.
gruss ekkehard
hallo ekkehard, finde keine Option um hochzuladen in dem Menü, kann das sein?
Hallo,
Antwort anklicken, dann findest Du unten den Button
"Attachments and other options".
Bitte das Beispiel "Komprimieren/Reparieren" (Access Dienstprogramm) und dann die DB als Zip-File hochladen.
Auf anonyme Daten achten.
Hallo Ekkehard & Knobbi
Hier die kleine DB. Habe alles entfernt was nicht benötigt wird zu testen.
Bitte macht euch aber keine übermässige Arbeit damit.
Danke
Hallo Nicolo,
habe dir das jetzt mal eingebaut. Ob ich aber das HF an eine Datenquelle binden würde, eher nicht. Es reicht, wenn die benötigten Daten in die Kombobox geladen werden und dann bei der Auswahl angezeigt werden. Das Leeren der Kombobox selber nach einer Auswahl muß m.M. nach auch nicht sein, verwirrt nur.
Einen Kardinalfehler solltest du aber nicht machen:
das SubForm-Steuerelement sollte niemals den selben Bezeichner/Namen bekommen wie das darin gebundene Formular! Ich weiß, der Assistent macht das so, sollte aber trotzdem nachträglich immer manuell angepaßt werden.
Knobbi38
Zitat von: Knobbi38 am Oktober 17, 2025, 12:36:04das SubForm-Steuerelement sollte niemals
Das wusste ich nicht, sonst hätte ich das nie so gemacht. Wieder was gelernt.
..
Die erste Ansicht lässt im Grunde nur eins zu. Bewunderung.
Die Codes sind ziemlich unterschiedlich zu vorher. Bis auf des gewünschte Abblenden
machen sie aber das gleiche oder?
Denke mir das dieses Formulieren der Codes einen Spielraum für den Programmierer beinhalten. Viele Wege.
Denn.- diese FindFirst Geschichte hab ich wie gesagt aus dem MS Form. Das hab ich
dort mal abgeschaut, von einem der Spezi.
Jetzt muss ich nur noch versuchen die perfekten Modi in meine DB zu bauen, ohne Fehler.
Ein guter Schritt ist gemacht in die künftige Verwendung.
Übr.: Wer sowas wie jetzt hier kann, der hat die Kenntnisse nach sehr intensivem Studium und viel Praxis erworben. Ich würde dazu Jahre brauchen. Aber dieses Niveau werde ich nie erreichen.
Vielen vielen Dank.
@Beaker s.a. Das Datenmodell scheint i.O. zu sein.
Hallo Nicolo,
Wollte es schon geschrieben haben, bin dann aber umhin gekommen.
Ja, das DM stimmt so.
ZitatDas wusste ich nicht, sonst hätte ich das nie so gemacht. Wieder was gelernt.
Ich mache es immer so, das ich einfach unterschiedlich Prefix verwende; -
uffFormname
Unter
Formular
Form
ufcFormname
Unter
Formular
Control
gruss ekkehard
Nachtrag
Habe einen Fehler drin, im UF weiß aber nicht wo.
Die Zeile
' Form events
Private Sub Form_Current()
txtBetrag.Enabled = Not CBool(txtKontenID_F = 8)
End Sub
Meldet Fehler beim kompilieren Variable nicht definiert.
Blau hinterlegt ist >txtKontenID_F =8<
Wo muss ich ansetzen?
Hallo,
wie aus dem Präfix "txt" zu entnehmen ist, ist das keine Variablenbezeichnung, sondern die Bezeichnung einer Textbox, die an das Feld "KontenID_F" gebunden ist. In diesem Fall ist die Textbox im Footer des Unterformulars platziert.
Der Hintergrund ist relativ einfach. I.d.R. verwende ich gebundene Textboxen, damit nicht direkt auf das Feld selber zugegriffen werden muß (hier für den Vergleich mit der Konstanten '8'). Solche Textboxen platziere ich dann gerne auch im Footer, um während der Entwicklungsphase Werte einfach kontrollieren zu können. Die besondere Bedeutung wird dabei durch die Darstellung rot auf gelb kenntlich gemacht und das Steuerelement für die Eingabe gesperrt. Wenn die Testphase beendet ist, wird entweder der Footer oder das Steuerelement einfach versteckt.
Wenn du das für ein anderes Formular übertragen möchtest, kannst du die Technik einfach mit übernehmen oder du greifst stattdessen direkt auf das 'Daten'-Feld zurück.
Btw.: innerhalb eines Reports solltest du immer alle Felder an ein Steuerelement binden; direkte Zugriffe auf ein Feld werden in einem Report manchmal von Access einfach "weg optimiert".
Knobbi38
PS:
Das der Code etwas anders aussieht, liegt schlichtweg daran, daß in deinem Beispiel dieser etwas vereinfacht werden konnte.
aha, jetzt weiß ich aber nicht wo ich was beim übertragen übersehen habe. Ich meine WO muss ich nachschauen?
Was versteckt ist kann ich ja nicht mit übernehmen
EDIT
Habe es gefunden. Da muss man aber erstmal drauf kommen.
btw.
angenommen ich möchte das Prozedre jetzt noch vertiefen, zum Beisp. wenn ich nicht die Konstante 8 sondern
die 1 bis 7 wähle, dann sollen die TxtFelder ZE ZE_KM HeW abgeblendet sein.
Dann muss sicher der Code
' Form events
Private Sub Form_Current()
txtBetrag.Enabled = Not CBool(txtKontenID_F = 8)
End Sub
erweitert werden um diese Varianten oder muss ich dafür sep. neue Frm bauen?
Wäre aber purer Luxus. Die jetzige Lösung reicht mir.
Hallo Nicolo,
ich habe jetzt mal die Programmlogik etwas erweitert, so daß auch beliebige Kombinationen von Textboxen je nach ID gesperrt werden können oder nicht.
Um dies generischer umzusetzen und leicht erweiterbar zu machen, wird ein Array mit Referenzen auf die Textboxen verwendet. Damit der Zugriff auf eine bestimmte Textbox einfacher und gezielter möglich ist, wird zusätzlich eine Aufzählung als Index für das Array erstellt. In diesem Fall ist dies möglicherweise etwas übertrieben, aber es soll lediglich das Prinzip veranschaulicht werden. In größeren Projekten kann das hilfreich sein.
Gruß Knobbi38
Hmm, verstehe. Zwar nicht 100%, aber soweit mein englisch reicht sollte ich das testweise
mal in meine DB einbauen können. Versuch macht klug.
Wenn es funktioniert hat melde ich mich wieder, wenn nicht auch.
Schönes WE und nochman ein großes Danke.
Offtopic
Dieses Forum ist super. Würde sagen besser als das alte.
Obwohl du mir auch im alten Forum schon mal geholfen hast glaube ich.
Rückmeldung
Hallo Knobbi38
Glaube die Sache hat eine Haken,
Hab die Codes entsprechend bei mir eingetragen.
Die betroffenen TxtFelder werden zwar beim Aufruf der Option ( z.B.V_H) abgeblendet
aber sobald ich einen neuen DS anfüge ( die Zeile ist ja direkt am Ende zu sehen um weitere DS einzufügen)
dann sind alle txtFelder frei und man kann alles eintragen.
Beim Aufruf OHNE das ich einen neuen DS anstoße, ist alles wie gewünscht abgeblendet.
Ziel war es ja, dass ich keine Daten in das TxtFeld eintragen kann wenn z.b. V_H gewählt wird.
Probier es aus. Oder habe ich etwas übersehen?