Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: gromax am November 01, 2015, 10:24:32

Titel: Programmaufruf
Beitrag von: gromax am November 01, 2015, 10:24:32
Liebe Access-Profis,

in einem Formular meiner DB habe ich zwei Befehlsschaltflächen, die jeweils Mails in Outlook generieren; das erste Click-Ereignis (btn_OutlookBeauftragung_Click) generiert zwei Mails, die innerhalb einer Frist beantragt wurden. Das zweite Click-Ereignis (cmd_nachFristOutlook_Click) erzeugt wiederum zwei Mails, die allerdings nach verstrichener Fristsetzung erfolgen.
Nun möchte ich diese zwei Befehlsschaltflächen gleichsam unsichtbar machen und eine neue Befehlsschaltfläche mit dem Aufruf eines neuen Formulars (frm_MailAuftrag_Auswahl) einpflegen. Das neue Formular bietet dem Anwender nun die Optionen der vormaligen Auswahl ("...innerhalb der Frist" & "...nach Fristsetzung") an.
Wie kann ich jetzt von diesem neuen Formular aus die bisherigen Prozeduren aufrufen?

Meine Idee:
Ich habe die bisherigen Prozeduren öffentlich gesetzt ("Public Sub btn_OutlookBeauftragung_Click()" & "Public Sub cmd_nachFristOutlook_Click()") und im neuen Formular folgenden Code eingegeben:

Private Sub opt_Frist_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  MailAufruf (1)
End Sub

Private Sub opt_Nachfrist_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  MailAufruf (2)
End Sub

Sub MailAufruf(intEingabe As Integer)
   
    If intEingabe = 1 Then
    Call Forms("frm_SCHUELER03!frm_Schueler_ufoBearbeitung03").btn_OutlookBeauftragung_Click
    End If

    If intEingabe = 2 Then
    Call Forms("frm_SCHUELER03!frm_Schueler_ufoBearbeitung03").cmd_nachFristOutlook_Click
    End If

End Sub


Ich erhalte nachmals immer den Laufzeitfehler '2450' mit dem Hinweis, dass Access das Formular nicht finden kann!

Wo steckt der Fehler?

Für Eure Hilfe vorab vielen Dank!
gromax
Titel: Re: Programmaufruf
Beitrag von: DF6GL am November 01, 2015, 16:27:35
Hallo,

ich rate dringend davon ab, die "Kapselung" der Klassenmodule/Prozeduren so aufzubrechen....

Erzeuge statt dessen in einem Standard-Modul Public-Prozeduren, die eben das beinhalten, was in den jeweiligen Ereignisprozeduren (z. B.: btn_OutlookBeauftragung_Click)  steht.

Diese globalen Prozeduren (Funktionen oder Subs) können dann von allen Stellen innerhalb der DB aufgerufen werden.
Titel: Re: Programmaufruf
Beitrag von: gromax am November 01, 2015, 18:57:10
Hallo Franz,

vielen Dank für die Richtung; ich mach mich dran und lass wieder von mir hören.

Viele Grüße
gromax
Titel: Re: Programmaufruf
Beitrag von: MaggieMay am November 01, 2015, 22:24:38
Hallo,

nur der Vollständigkeit halber, syntaktisch korrekt wäre es folgerndermaßen:
Call Forms("frm_SCHUELER03")!frm_Schueler_ufoBearbeitung03.Form!btn_OutlookBeauftragung_Click
Dazu müsste aber die Click-Prozedur von Private auf Public umgestellt werden, was einen Eingriff in die Deklaration der Ereignisprozeduren bedeutet, von dem grundsätzlich abzuraten ist, auch wenn es in diesem Fall unproblematisch erscheint.

Aber wozu überhaupt das zusätzliche Formular, was versprichst du dir davon?
Titel: Re: Programmaufruf
Beitrag von: gromax am November 02, 2015, 00:34:59
Hallo MaggieMay,

vielen Dank für Deine Hilfe; es funktioniert super, wenn ich statt der beiden Ausrufezeichen in Deinem Ausdruck Punkte (.) setze.

Die Intention für dieses zusätzliche Formularfeld hat einen rein optischen Hintergrund; in der bisherigen Version hatte ich drei Schaltflächen für den WORD-Aufruf und die beiden Mail-Versionen. Es sieht einfach nicht gut aus, will heißen, die Oberfläche des Formulars vermittelt einen "unruhigen Eindruck".
Mit dem neuen Formular kann ich eine "Info-Box" einpflegen, die über eine Schaltfläche aufrufbar ist und eben die drei Optionen zum Aufruf von WORD bzw. zweimal OUTLOOK anbietet.

Jetzt habe ich mit Deiner Hilfe zumindest die Optik, die ich mir vorstelle; trotzdem möchte ich den von Franz angezeigten Weg weiterverfolgen!
Er hat sich ja - wie Du auch - zu dem "Veröffentlichen" der Prozeduren skeptisch geäußert; könntest Du mir noch ein paar Stichworte notieren, worin denn dabei eine Gefahr besteht?
Kommen denn dadurch Prozeduren durcheinander, die eventuell auf die gleichen öffentlichen/nicht-öffentlichen Variablen zugreifen? Muss ich die Variablen in den öffentlichen Prozeduren etwa umbenennen?

Ich bin wirklich dankbar für die Unterstützung!

Alles Gute
gromax
Titel: Re: Programmaufruf
Beitrag von: MaggieMay am November 02, 2015, 01:59:27
Hi,
ZitatDie Intention für dieses zusätzliche Formularfeld
es geht hier doch um ein zusätzliches Formular, nicht um ein Formularfeld (=Steuerelement).

Nach der Trennung der Funktionen vom 1. Formular und Übertragung derselben auf das 2. Formular, sollte auch der diesbezügliche Code in das 2. Formular übernommen werden.
Die Auslagerung des Codes in ein allgemeines Modul ist da nicht nötig.

PS:
Was das betrifft:
ZitatKommen denn dadurch Prozeduren durcheinander, die eventuell auf die gleichen öffentlichen/nicht-öffentlichen Variablen zugreifen? Muss ich die Variablen in den öffentlichen Prozeduren etwa umbenennen?
so kannst du in der Access-Hilfe Informationen bzgl. des Gültigkeitsbereichs von Variablen finden.
Titel: Re: Programmaufruf
Beitrag von: gromax am November 14, 2015, 15:41:50
Hallo MaggieMay, hallo Franz,

natürlich geht es hier nicht um ein Formularfeld sondern um ein Formular; da war ich einfach zu schludrig in der Ausdrucksweise.

Das Auslagern des Codes in ein allgemeines Modul habe ich gemacht; das funktioniert genauso super, wie wenn ich die Prozeduren gleichsam mit public "öffentlich" mache. Die Gefahr, die Franz angedeutet hat, ist mir allerdings nicht so ganz klar, zumal in dieser DB kein anderer Code einpflegt?!

Danke für Eure Hilfe
gromax