Neuigkeiten:

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

Mobiles Hauptmenü

Feld automatisch ausfüllen

Begonnen von Abacus, Juli 20, 2016, 23:47:35

⏪ vorheriges - nächstes ⏩

Abacus

Ich habe eine Tabelle mit einer Ordnungsliste. Zu jeder Ordnungszahl gehört ein Beschrieb des Inhaltes, z.B. "211" = "Baumeister". Nun kann es bei jedem Projekt kleinere Abweichungen von diesem Standard geben. Ich möchte also, dass das Feld mit dem Namen automatisch mit einem Standardwert aus der Ordnungsliste ausgefüllt wird, sobald ich das Feld mit der Ordnungszahl verlasse. Ich schreibe also in meinem Projekt "211" klicke auf den Tabulator und möchte, dass im nächsten Feld automatisch "Baumeister" steht, ohne Referenz, da ja projektspezifisch.
Makro, VBA, Nachschlagen? Leider auch mit Google nicht fündig geworden.

Beaker s.a.

Hallo Abacus,
ZitatMakro, VBA, Nachschlagen?
Makro -> besser nicht
VBA -> IMO nicht nötig
Nachschlagen -> Ja, aber nur auf einem Formular mit einem Kombifeld.
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)

MzKlMu

Hallo,
da das Feld nach der Auswahl noch überschreibbar sein muss, kommt hier nur VBA (oder Makro) in Frage. Makros will keiner, daher bleibt nur VBA.
Dazu holt mal mit DLookup den Wert aus der Tabelle.

Me.FeldFürBeschrieb = DLookup("Beschrieb","Ordnungsliste","Ordnungszahl =" & Me.Ordnungszahl)

Der Code muss als Ereignisprozur in das Ereignis "Nach Aktualisierung" von Me.Ordnungszahl (=Formularfeld mit der OZahl).
Gruß Klaus

Beaker s.a.

Hallo Klaus,
Hast ja Recht; - wieder zu unaufmerksam gelesen.

Aber, mir stellt sich die Frage, was denn dann in der Projekte-Tabelle gespeichert
wird.

Die Ordnungszahl? Dann macht das Überschreiben keinen Sinn.
Die Ordnungszahl und der Beschrieb? Verletzt IMO die Normalisierungsregeln.
Nur der Beschrieb? Dann würde ich das Feld für die O-Zahl als Kombi anlegen,
(ID, Beschrieb; 1cm;0cm) und mir den Beschrieb aus .Column(1) holen.
Da brauch ich kein DLookup; - ohne VBA geht's allerdings auch nicht  ;)

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)

MzKlMu

Hallo,
Zitatund mir den Beschrieb aus .Column(1) holen.
nein, das geht nicht, denn dann ist das Feld an das Kombi gebunden (über Column) und nicht überschreibbar. Und genau das ist ja gewünscht.
Da der Beschrieb ja für jeden Datensatz zwar vorbelegt aber trotzdem individuell änderbar sein muss, sollte in die Projekttabelle ein Feld für den Beschrieb, sonst keines. Verstößt auch nicht gegen die Normalisierungsregeln.
Gruß Klaus

MaggieMay

Hi,

es ist doch kein Problem, wenn man das Kombifeld auf "Nur Listeinträge = Nein" einstellt.
Der Text muss natürlich gespeichert werden - so oder so.
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
so geht's natürlich auch.  :D
Gruß Klaus

Abacus

Vielen Dank an MzKlMu. Ich muss bei VBA noch etwas üben, aber ich denke, dass es so klappen muss. Ich darf nur nicht daran denken, wie einfach so etwas mit FileMaker zu bewerkstelligen ist. Tut manchmal schon etwas weh dieses Access :-)

Beaker s.a.

Hallo Klaus,
Worin besteht denn der Unterschied zwischen
Me.FeldFürBeschrieb = DLookup("Beschrieb","Ordnungsliste","Ordnungszahl =" & Me.Ordnungszahl)
und
Me!FeldFürBeschrieb = Me!cboOZahl.Column(1)

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)

MzKlMu

Hallo,
@ekkehard
so ist natürlich kein Unterschied, ich dachte Du wolltest das als Formel im Feld hinterlegen.
=cboOZahl.Column(1)
Klassisches Missverständnis.
Gruß Klaus

Beaker s.a.

Hallo Klaus,
Zitatich dachte Du wolltest das als Formel im Feld hinterlegen.
Dann hätte ich dieses nicht erwähnt
Zitatohne VBA geht's allerdings auch nicht

ZitatKlassisches Missverständnis.
Passt schon.
Ausdrücke im Steuerelemente-Inhalt verwende ich normalerweise gar nicht.
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)

Abacus

Bin vielleicht doch zu doof für VBA. Ich kriege die Fehlermeldung: "Unzulässige Verwendung des Schlüsselworts Me". Markiert wird dabei das zweite Me. Hier noch mein Code:
Option Compare Database

Sub BKPS()
    Me.rec_bkp_Name = DLookup("bkps_Name", "tbl_BKPS", "bkps_Nr =" & Me.rec_bkp_Nr)
End Sub

MzKlMu

Hallo,
der Code muss in eine Ereignisprozedur wie ich in #2 schon geschrieben habe, nicht als selbständiger Code in ein eigenes Modul.
Private Sub rec_bkp_Nr_AfterUpdate()
  Me.rec_bkp_Name = DLookup("bkps_Name", "tbl_BKPS", "bkps_Nr =" & Me.rec_bkp_Nr)
End Sub


Gruß Klaus

MaggieMay

Hi,

und was das betrifft:
Zitat von: Abacus am Juli 21, 2016, 23:21:57Option Compare Database

Aktiviere die VBA-Option "Variablendeklaration erforderlich" und füge die Zeile "Option Explicit" in alle bereits bestehenden Module ein, das schützt vor unangenehmen Überraschungen bei der Programmierung. ;-)
Freundliche Grüße
MaggieMay

Abacus

Lieber Klaus

Ich und VBA funktioniert offensichtlich noch nicht so recht. Habe Formular erstellt und dabei folgenden Code als Ereignisprozedur eingegeben:
Option Compare Database

Private Sub bkp_Nr_AfterUpdate()
    Me.bkp_Name = DLookup("bkps_Name", "tbl_BKPS", "bkps_Nr =" & Me.bkp_Nr)
End Sub

Sobald ich in bkp_Nr ein Zahl eingegeben habe, soll Access/VBA in der Tabelle tbl_BKPS bei Übereinstimmung von bkp_Nr und bkps_Nr den Namen bkps_Name nachschlagen und in der offenen Tabelle unter bkp_Name schreiben.

Ist der Hinweis von Maggie relevant oder nice to have? Habe ich nämlich nicht umgesetzt.