Access-o-Mania

Access-Forum => Access Programmierung => Thema gestartet von: Carl am Juni 13, 2019, 14:52:33

Titel: Prozeduren mehrfach nutzen
Beitrag von: Carl am Juni 13, 2019, 14:52:33
Hallo, mal eine ökonomische Frage.

gegeben ist eine aufwändig gebastelte Prozedur

Private Sub Ein_Button_Click()
   blah blah blah
End Sub

Jetzt soll ein Textfeld beim Eingeben eines "Enter" genau das machen, und zwar mit einem einfachen Verweis

Private Sub Textfeld_Click()
   ??Wie verweist man auf die Prozedur von Ein_Button??
End Sub

Carl
Titel: Re: Prozeduren mehrfach nutzen
Beitrag von: PhilS am Juni 13, 2019, 16:31:44
   ??Wie verweist man auf die Prozedur von Ein_Button??
Private Sub Textfeld_Click()
   Ein_Button_Click
End Sub
So weit das technische Minimum.
Du solltest noch einen Schritt weiter gehen und die Prozedur unter einem eigenen Name, der beschreibt was die Prozedur tut speichern, und dann sowohl in Textfeld_Click als auch  Ein_Button_Click diese neue Prozedur aufrufen. Das hilft in ein paar Wochen ungemein zu verstehen, was dein Code eigentlich tut.
Titel: Re: Prozeduren mehrfach nutzen
Beitrag von: Carl am Juni 13, 2019, 17:53:20
ah, okay, danke.

Legt man dann die Prozeduren unter einem eigenen Modul an?

Kannst Du mir bitte noch sagen, wie ich eine Prozedur in einem anderen "Klassenobjekt" (Modul?) ansprechen kann?

Danke, Carl
Titel: Re: Prozeduren mehrfach nutzen
Beitrag von: PhilS am Juni 14, 2019, 09:17:34
Legt man dann die Prozeduren unter einem eigenen Modul an?
Das kommt darauf an...
Wofür ist die jeweilige Prozedur "zuständig"?

Eine Prozedur die sehr eng an ein bestimmtest Formular gebunden ist, sollte im Klassenmodul dieses Formulars bleiben. Sie ist dann nur verfügbar, wenn dieses Form auch geladen ist. Sie hat aber unmittelbaren Zugriff auf die Eigenschaften und Steuerelemente des jeweiligen Formulars.

Eine Prozedur in einem allgemeinen Modul ist immer und von überall erreichbar. Die hat aber keinen direkten Zugriff auf die Eigenschaften und Steuerelemente der jeweiligen Formulare. Diese (oder das Formular selbst) müssen (sollten) bei Bedarf als Argumente an die Prozedur übergeben werden


Kannst Du mir bitte noch sagen, wie ich eine Prozedur in einem anderen "Klassenobjekt" (Modul?) ansprechen kann?
Hier musst du zwischen Allgemeinen Module, die du im VBA-Projektexplorer unter "Module" siehst, und Klassenmodulen, im VBA-Projektexplorer unter "Klassenmodule" oder die Module von Formularen und Berichten, unterscheiden.

Prozeduren in Allgemeinen Modulen sind immer und von Überall zu erreichen. Der Aufruf einer Prozedur aus einem solchen funktioniert auch genauso wie oben gezeigt.

Code in Klassenmodulen bezieht sich immer auf eine Instanz, d.h. ein Objekt, der jeweiligen Klassen. Von innerhalb der Klassen erfolgt der Aufruf auch genauso wie gezeigt. Von ausserhalb brauchst du immer einen Verweis auf die Objektinstanz der Klasse und rufst dann ihre Methoden (Prozeduren und Funktionen) auf.

Objektinstanz.Prozedurname()

Beachte auch die Sichtbarkeit der Prozeduren. Private Prozeduren sind nur innerhalb des Moduls in dem sie deklariert wurden sichtbar. Public Prozeduren sind auch von aussen sichtbar,


Zum Einstieg verweise ich auch noch auf das VBA-Tutorial von Martin Asal (https://www.vba-tutorial.de/).
Titel: Re: Prozeduren mehrfach nutzen
Beitrag von: Carl am Juni 14, 2019, 12:19:27
Vielen Dank, das hilft mir gut weiter. Ich probier' das jetzt mal so nach und nach durch. :-)

Carl