Formular Namen via VBA

Moderator: ModerationP

Formular Namen via VBA

Beitragvon hoffi3d50 » 20. Nov 2020, 15:09

Hey,

ich habe in einer DB diverse Formular.
Beim öffnen des Formulars, lasse ich den Namen in eine Variable schreiben.

Nun möchte ich gerne eine Function haben in der aufgrund dieses Namens in einer Tabelle Daten wie z.B. Titel, Untertitel etc. des Formulars gefüllt werden.
Die Function möchte ich deswegen unabhängig vom Formular haben um ein und diesselbe Function für alle Formulare nutzen zu können
Die Function selber sollte noch prüfen ob das Feld in dem Formular vorhanden ist (das habe ich noch nicht eingebaut weil Ka wie)

So sieht es bisher aus(hab bissel probiert deswegen sehen die Zeilen unterschiedlich aus):

Code: Alles auswählen
Public Function FctFrmTitle(ByVal vFrmName As String)

Forms(vFrmName).Form(TxtTitelFrm) = DMax("TitelFrm", ConBereiModFrm, "FrmName = '" & vFrmName & "'")
Forms!vFrmName!TxtModul = DMax("ModBez", ConBereiModFrm, "FrmName = '" & vFrmName & "'")
Forms!vFrmName.Caption = DMax("ModBez", ConBereiModFrm, "FrmName = '" & vFrmName & "'") & "\" & DMax("TitelFrm", ConBereiModFrm, "FrmName = '" & vFrmName & "'")

End Function


Leider alles ohne Erfolg
hoffi3d50
 

Re: Formular Namen via VBA

Beitragvon SGast » 20. Nov 2020, 16:05

Hallo,
die Aufgabe gliedert sich ja in 2 Teile:
1) Auslesen der Werte
2) Zuweisen der Werte

An welcher Stelle klemmt es?

"Kein Erfolg" ist eine wenig aussagekräftige Beschreibung/Fehlermeldung.

Gruß Steffen.
SGast
 

Re: Formular Namen via VBA

Beitragvon knobbi38 » 20. Nov 2020, 17:56

Hallo,

so etwas löst man normalerweise mit einer Klasse, der beim initialisieren eine Referenz des Formulars übergeben wird. Da werden dann keine Formularnamen mehr gebraucht und man muß auch nicht über die globale Forms-Auflistung gehen.

Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2798
Registriert: 02. Jul 2015, 14:23

Re: Formular Namen via VBA

Beitragvon hoffi3d50 » 23. Nov 2020, 10:11

SGast hat geschrieben:Hallo,
die Aufgabe gliedert sich ja in 2 Teile:
1) Auslesen der Werte
2) Zuweisen der Werte

An welcher Stelle klemmt es?

"Kein Erfolg" ist eine wenig aussagekräftige Beschreibung/Fehlermeldung.

Gruß Steffen.


Hallo Steffen,

da hast du Recht die Problembeschreibung ist einfach mies. Sorry dafür.

Teil 2 ist mein Thema. Das Auslesen geht.
Im Formular selber kann ich die Zuweisung auch über Me! oder Me. wunderbar realisieren.
Nur ebend nicht wenn es separat in einem Modul ist.

Als Schmankerl suche ich halt noch eine Variante wie ich prüfen kann ob es dieses Textfeld gibt und wenn nicht, es dann auch nicht gefüllt wird.
Das aber nur als Schmankerl.
hoffi3d50
 

Re: Formular Namen via VBA

Beitragvon Bitsqueezer » 23. Nov 2020, 10:39

Hallo,

wie Ulrich schon sagte: Referenz ist das Zauberwort.

Was Du innerhalb des Formularmoduls mit "Me" machst, machst Du in einem Standardformular, indem Du diesem die Referenz auf das Formular übergibst.

Code: Alles auswählen
Public Sub MeineProzedur(frm As Access.Form)


Und der Aufruf vom Formular aus:

Code: Alles auswählen
MeineProzedur Me


Innerhalb der Prozedur verwendest Du dann "frm" statt "Me".

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7911
Registriert: 21. Jun 2007, 12:17

Re: Formular Namen via VBA

Beitragvon hoffi3d50 » 25. Nov 2020, 10:47

Hallo,

ich versuche das gerade umzusetzen, bin aber vermutlich zu doof. :(

Aufruf aus dem Formular (im Form_Load)
Code: Alles auswählen
FrmTitle Me


Code im Modul
Code: Alles auswählen
Public Sub FrmTitle(frm As Access.Form)

frm.Form(TxtTitelFrm) = DMax("TitelFrm", ConBereiModFrm, "FrmName = '" & vFrmName & "'")

End Sub


Ich bin zu doof :/
hoffi3d50
 

Re: Formular Namen via VBA

Beitragvon Bitsqueezer » 25. Nov 2020, 11:19

Hallo,

wieso ".Form"?

Einfach so:

Code: Alles auswählen
frm.TxtTitelFrm = ...


Oder:

Code: Alles auswählen
frm.Controls("TxtTitelFrm") = ...


Um die Funktion abzusichern, könnte man auch darüber nachdenken, erst zu testen, ob es "TxtTitelFrm" auf dem Formular überhaupt gibt, z.B. durch Abrufen aus der Controls-Auflistung.

Und warum "DMax"? Du gruppierst doch nicht. DLookup wäre hier zu verwenden.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7911
Registriert: 21. Jun 2007, 12:17

Re: Formular Namen via VBA

Beitragvon SGast » 25. Nov 2020, 11:21

Hallo,
du willst die Beschriftung/Caption eines Formulars anpassen?

Dann so:
Code: Alles auswählen
Public Sub FrmTitle(frm As Access.Form)
frm.Caption = "Das ist ein Test"
' frm.caption = DMax("TitelFrm", ConBereiModFrm, "FrmName = '" & vFrmName & "'")

End Sub
SGast
 

Re: Formular Namen via VBA

Beitragvon hoffi3d50 » 25. Nov 2020, 12:12

SGast hat geschrieben:Hallo,
du willst die Beschriftung/Caption eines Formulars anpassen?

Dann so:
Code: Alles auswählen
Public Sub FrmTitle(frm As Access.Form)
frm.Caption = "Das ist ein Test"
' frm.caption = DMax("TitelFrm", ConBereiModFrm, "FrmName = '" & vFrmName & "'")

End Sub


Vielen Dank, das habe ich schon gelöst, ist natürlich auch eine Idee ;) Danke!


Bitsqueezer hat geschrieben:Hallo,

wieso ".Form"?

Einfach so:

Code: Alles auswählen
frm.TxtTitelFrm = ...


Oder:

Code: Alles auswählen
frm.Controls("TxtTitelFrm") = ...


Um die Funktion abzusichern, könnte man auch darüber nachdenken, erst zu testen, ob es "TxtTitelFrm" auf dem Formular überhaupt gibt, z.B. durch Abrufen aus der Controls-Auflistung.

Und warum "DMax"? Du gruppierst doch nicht. DLookup wäre hier zu verwenden.

Gruß

Christian


Heureka Danke.

Jetzt läuft es wie es soll.

Um die Funktion abzusichern, könnte man auch darüber nachdenken, erst zu testen, ob es "TxtTitelFrm" auf dem Formular überhaupt gibt, z.B. durch Abrufen aus der Controls-Auflistung.


Das wäre Punkt zwei nur habe ich wirklich 0 Plan wie ich das mache. Alternativ würde ich die Fehlermeldung abfangen => nicht so schick.
hoffi3d50
 

Re: Formular Namen via VBA

Beitragvon Bitsqueezer » 25. Nov 2020, 14:09

Hallo,

leider gibt es in Collections keine "Exists"-Methode. Daher bleibt nur die "häßliche" Variante, "On Error Resume Next" zu verwenden und dann nach dem Zugriffsversuch per "frm.Controls("xyz")" abzufragen, ob Err.Number = 0 ist, um zu wissen, daß das Control existiert.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7911
Registriert: 21. Jun 2007, 12:17

Re: Formular Namen via VBA

Beitragvon SGast » 25. Nov 2020, 15:22

Hallo,
um die unschöne Methode zu vermeiden kannst du etwas in der Art:
Code: Alles auswählen
Function fncCtlExists(frm As Form, ctlName As String) As Boolean
Dim c As Control
fncCtlExists = True
    For Each c In frm.Controls
        If c.Name = ctlName Then Exit Function
    Next
fncCtlExists = False
End Function
machen.

Für besondere Eigenschaften müsstest du eventuell noch den Controltyp abfrage/ermitteln.

Gruß Steffen
SGast
 

Re: Formular Namen via VBA

Beitragvon Beaker s.a. » 25. Nov 2020, 18:33

Hallo,
Code: Alles auswählen
DMax("TitelFrm", ConBereiModFrm, "FrmName = '" & vFrmName & "'")

Aber ob nun DMax oder DLookup ist beim TS nicht klar woher die Variable
"ConBereiModFrm" herkommt. Die Domäne in den Aggregatfunktionen ist vom
Typ "String" und gehört zwischen "", oder ist eben eine Stringvariable.

gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1056
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste