Juni 21, 2021, 02:16:26

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Ereignis für 200 FormFelder vereinfachen

Begonnen von hdkneip, Mai 19, 2021, 19:36:53

⏪ vorheriges - nächstes ⏩

hdkneip

Hallo
Wie kann ich es vereinfachen, dass ich nicht für alle FormFelder gleichen Aufbaus entsprechende Routinen anlegen muss.
Die Felder haben die Namen AW100 bis AW200.
In den Routinen werden die gleichen Sachen gemacht mit 100 bis 200.
Eine Routine wäre doch möglich, in der der Name des aufrufenden Formfeldes ermittelt wird.
Für Tipps im voraus danke.
hdkneip

MzKlMu

Hallo,
200 Formularfelder sind für eine Datenbank eher ungewöhnlich.
Ob da das Datenmodell stimmt ?
Was steht denn in den Feldern ?
Gruß
Klaus

Josef P.

Mai 19, 2021, 21:00:49 #2 Letzte Bearbeitung: Mai 19, 2021, 21:15:59 von Josef P.
Hallo!

Einfachste Variante: Eine Funktion (mit Steuerelementreferenz als Parameter) in die Ereignisprozeduren schreiben (kann auch per VBA einmalig im Entwurfsmodus oder zur Laufzeit automatisiert erfolgen).

Klassen-Variante:
Eine Klasse schreiben, die auf die jeweiligen Ereignisse des Steuerelements reagieren kann. Diese Klasse für jedes benötigte Steuerelement instanzieren, die passende Referenz übergeben und z. B. in eine Collection abspeichern.
Beispiel: Ereignisbehandlung (Ist zwar schon etwas älter, zeigt aber das Prinzip ;-)

mfg
Josef

hdkneip

Hallo Klaus

Ich möchte aus tausenden Sätzen mit je über 600 Zeichen bestimmte Daten markieren (durch Anklicken 1. und letzes FormFeld) um diese Daten weiter zu verwenden.
Also Geburtsdaten, Beruf, Heiraten ....
Bin leider kein Profi (Jahrgang 1936).
Gruß von Rhein und Mosel
Dieter


crystal

Hallo,
ohne mich jetzt um Datenmodell und andere Fragen zu kümmern (hier gibt's sicherlich Denk- oder Implementierungsfehler)...
Schreibe eine
Function TuWas(intNummer as integer)
In das betreffende Ereignis der Felder AW101 bis AW200 (sind ja nur 100) schreibe dann:
=TuWas(101) bzw. =TuWas(102) usw.

Oder:
private Function TuWas(strFeld as string)
dim intNummer as integer

intNummer=right(strfeld,3)
if me.controls.strfeld = "X" then
  me.controls."AnderesFeldmitderselbenNummer" & intnummer = "In " & strfeld & " steht X."
else
  me.controls."AnderesFeldmitderselbenNummer" & intnummer = "In " & strfeld & " steht kein X."
endif
end function

und in AW101...
=TuWas("AW101"), =TuWas("AW102")...

Wichtig ist dabei das Gleichheits-Zeichen (Zuweisungs-Zeichen)!

Das ist hier m. E. die einzige Möglichkeit, einer allgemeinen Funktion mitzuteilen, wer sie aufruft. Andere Versuche wie =TuWas(me.name) klappen nicht.

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Beaker s.a.

Hier
me.controls."AnderesFeldmitderselbenNummer" & intnummerfehlen die Klammern
Zitatme.controls.("AnderesFeldmitderselbenNummer" & intnummer)
Die Zuweisung eines Textes mit dem Feldnamen an das Control erschliesst
sich mir allerdings nicht.
Ohne zu wissen, was der TS nun tatsächlich mit den Felder bzw. deren Inhalt
vor hat, ist es aber auch schwierig dazu sinnvolle Hilfe zu geben.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

markus888

ZitatDie Zuweisung eines Textes mit dem Feldnamen an das Control erschliesst
sich mir allerdings nicht.

In der Regel bringt das auch nichts.
Ausnahmen sind Controls die keinen Focus erhalten können und daher nicht via Screen.ActiveControl ausgelesen werden können. Z.B. bei einem Label.
10 Jahre Access

crystal

@Beaker s.a.
...Danke für die Korrektur meines Luftcodes und das Befolgen meiner Bitte in meinem Signaturtext!...

[Der Umweg über eine Integer aus dem numerischen Teil des Feldnamens, statt gleich den rechten Teil-String zu benutzen, soll auch nur zeigen, dass man damit dann auch einfach Schleifen realisieren kann, z. B. alle Felder AW101 bis AW200 prüfen und zählen, wie oft genau "X" darin steht.]

Ein Sinn erschließt sich mir freilich letztlich auch nicht. War ja auch nur als ein primitives Beispiel für "irgendwas" gedacht, indem z. B korrespondierende Felder via Nummer angesprochen werden.
Bin gespannt, ob sich der TS mit weiteren Details melden wird (Tausende Datensätze mit je mehr als 600 Zeichen??? Alte Lochkarten?)... Immerhin: Jahrgang 1936. Respekt!

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

hdkneip

Hallo

Es sind mehere tausende Sätze mit über 600 Zeichen Fließtext.
Pro Satz gebe ich pro Buchstabe in die einzelnen einstelligen Felder ein (max 200 Zeichen).
Beim Klicken wird ein Ereignis angesprungen
Private Sub txtfeld038_Click
t00=38
modtext
End Sub
... von txtfeld001 bis txtfeld200..
Beim nächsten Klick kann ich die Länge ermitteln und die Zeichen als Text erstellen, der dann weiter verarbeitet wird.
Es funktioniert ja auch.
Hatte nur gedacht, es könnte eifacher gehen.
Danke für eure Tipps.
Gruß von Rhein und Mosel
Hans Dieter

ebs17

Zitatgedacht, es könnte eifacher gehen
In der Tat. Für Textverarbeitung braucht man kaum Hunderte Steuerelemente.
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Hallo Hans Dieter,
ZitatEs funktioniert ja auch.
Wenn du zeigen würdest, was da funktioniert, könnte man auch
sehen, ob es einfacher geht.
Evtl. reicht es ja auch in der Prozedur "modtext" auf das aktive Feld
zuzugreifen
Function modtext() As String
    Dim ctl As Access.Control
    Set ctl = Screen.ActiveControl

    'mach was mit ctl
End Function
Und statt jetzt für jedes Feld eine Ereignisprozedur zu schreiben,
schreibst du in die Eigenschaft "Beim Klicken" einfach
=modtext
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

hdkneip

Hallo Ekkehard

Habs mit >function< ausprobiert.
Hat Fehler gebracht.

Trotzdm Danke für den Tipp
Gruß von Rhein und Mosel
hdkneip

Beaker s.a.

Mein Fehler, sorry.
Der Ausdruck muss so lauten
Zitat=modtext()
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.