Neuigkeiten:

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

Mobiles Hauptmenü

Programmaufruf

Begonnen von gromax, November 01, 2015, 10:24:32

⏪ vorheriges - nächstes ⏩

gromax

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

DF6GL

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.

gromax

Hallo Franz,

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

Viele Grüße
gromax

MaggieMay

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?
Freundliche Grüße
MaggieMay

gromax

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

MaggieMay

#5
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.
Freundliche Grüße
MaggieMay

gromax

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