collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 39
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 1
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13611
  • stats Beiträge insgesamt: 60959
  • stats Themen insgesamt: 8314
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Prozedure mit Variable im Namen aufrufen  (Gelesen 477 mal)

Online Xoar

  • Access-Profi
  • **
  • Beiträge: 367
Prozedure mit Variable im Namen aufrufen
« am: Juni 14, 2017, 17:35:34 »
Hallo Leute, ich hab ein Problem....
ich hab zur Zeit in einer Funktion einen Aufruf einer Public Subvon einem Steuerelement eines Formularmoduls .
Forms!frmzeiterfassung!ufrmZeiterfassung.Form.von1_AfterUpdatedas klappt wunderbar, jetzt hab ich allerdings von diesen von1 Feld insg. 5, also von1, von2....
Jetzt übergebe ich in meiner Funktion einen Parameter um welches von Feld es sich handelt.   

Public Function PositionenZeitenEintragen(Datum As Date, MitarbeiterID As Integer, PositionID As Integer, welchesForm As String, Optional welchesSteuerelement As String) 'integer und Variant auch schon probiert

Jetzt muss ich meinen Prozedureaufruf ja umschreiben, sodass die Variable angibt welche von(1-5)_afterUpdate Prozedure aufgerufen wird.

Da hab ich schon einige Varianten probiert, aber keine klappt.
Dim vonVariable as variant
vonVariable = "von" & welchesSteuerelement & "_AfterUpdate"
Call Forms("frmdienstplan").Controls("ufrmDienstplan").Form(vonVariable)

Forms!frmdienstplan!ufrmDienstplan.Form ("von" & welchesSteuerelement & "_AfterUpdate")
klappen aber alle nicht, kommt immer die Fehlermeldung 438, Objekt unterstützt diese Eigenschaft oder Methode nicht.

könnt ihr mir da helfen?

PS: in den after_update Prozeduren wird immer diese Sub aufgerufen
Me!bis1Datum = ZeitwertZuDatumTragenBis(Me!von1, Me!bis1, Me!DatumID_F, Me!von1Datum)natürlich mit angepassten Feldern (Nummern)

Grüße
« Letzte Änderung: Juni 14, 2017, 17:39:45 von Xoar »
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 152
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #1 am: Juni 14, 2017, 17:53:05 »
Da gibt es viele Möglichkeiten.
Wenn alle diese Methoden das gleiche machen, dann erstelle eine Methode an die du entsprechenden Argumente übergibst.

Alternativ kannst du bei Objekten wie einem Form mit der CallByName Methode, Code ausführen.

LG Markus
10 Jahre Access
 
Folgende Mitglieder bedankten sich: Xoar

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1401
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #2 am: Juni 14, 2017, 18:41:19 »
Hallo Xoar,
Ist ja alles ein bisschen kurz dargestellt, aber warum der Umweg über
das AfterUpdate-Ereignis?
Die letzte Sub kannst du doch auch direkt aufrufen. Und dabei auch
gleich den richtigen Namen des Controls übergeben.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: Xoar

Offline daolix

  • Access-Profi
  • **
  • Beiträge: 332
  • Von nix nen Plan
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #3 am: Juni 14, 2017, 19:54:11 »
Hallo
sind denn alle deine "von(X)_AfterUpdate" überhaupt public?
 
Folgende Mitglieder bedankten sich: Xoar

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1401
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #4 am: Juni 14, 2017, 21:46:43 »
Hallo Xoar,
Zitat
sind denn alle deine "von(X)_AfterUpdate" überhaupt public
Das ist wichtig, normal sind Ereignisprozeduren ja Private.
Und dann kannst du es mit
Call Forms("frmdienstplan").Controls("ufrmDienstplan").Form.Controls("von" & Variable).AfterUpdateversuchen.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: Xoar

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 152
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #5 am: Juni 14, 2017, 22:33:30 »
Call Forms("frmdienstplan").Controls("ufrmDienstplan").Form.Controls("von" & Variable).AfterUpdate

Hast du das getestet?
AfterUpdate ist eine Eigenschaft.
Mich würde es wundern, wenn das aufrufen einer Eigenschaft ganz was anderes macht als es sollte.

LG M
10 Jahre Access
 
Folgende Mitglieder bedankten sich: Xoar

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1401
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #6 am: Juni 15, 2017, 00:13:40 »
Hallo Markus,
Getestet, - nein.
Aber du hast natürlich recht, so würde es wohl nur "[Ereignisprozedur]"
zurück geben.
Dann wird das Vorhaben wohl in der Form scheitern, da man den Namen
der Prozedur, der da ja hin müsste, nicht als String übergeben kann.
Bleibt also nur die angesprochene Lösung mit Übergabe des Controls.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: Xoar

Online Xoar

  • Access-Profi
  • **
  • Beiträge: 367
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #7 am: Juni 15, 2017, 03:30:23 »
Hallo, ja sind natürlich alle public.
Wie würde der Aufruf mit der Übergabe des Controls denn aussehen?

 

Online Xoar

  • Access-Profi
  • **
  • Beiträge: 367
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #8 am: Juni 15, 2017, 10:20:51 »
War gestern etwas spät ;)
Also anstatt in meiner Funktion das afterUpdate-Ereignis aufzurufen, direkt die Prezedure mit den übergebenen Wert.

rs!("Datum" & vonVariable) = ZeitwertZuDatumTragenBis(rs!("von" & vonVariable) ,rs!("bis" & vonVariable), rs!DatumID_F, rs!("von" & vonVariable & "datum"))
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 583
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #9 am: Juni 15, 2017, 11:23:11 »
Du musst schon die Syntaxregeln von VBA beachten, um auf die Auflistung Fields eines Recordsets zuzugreifen. Gültig wäre Objectvariable!Itemname (hier kann aber keine Variable für !Itemname verwendet werden) oder Objektvariable("Itemname") (hier kann Itemname aus Variablen und/oder Konstanten zusammengesetzt werden).

Ob man seine Ereignisprozeduren öffnentlich macht, ist letztendlich eine Frage des Stils. Ich selbst lege mir lieber eine Public Sub oder Public Function an, die sowohl vom Event als auch extern über eine Objektinstanz des Formulars erreichbar ist.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Xoar

Online Xoar

  • Access-Profi
  • **
  • Beiträge: 367
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #10 am: Juni 15, 2017, 11:37:59 »
Stimmt.

Komme leider erst Dienstag dazu das zu testen... hoffe es klappt :D
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1401
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #11 am: Juni 15, 2017, 13:44:49 »
Hallo Xoar,
Zitat
sind natürlich alle public
Ereignisprozeduren von Formularen/Berichten sind natürlich Private.
Das Umstellen auf Public ist also nicht natürlich; - siehe dazu auch #9.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Online Xoar

  • Access-Profi
  • **
  • Beiträge: 367
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #12 am: Juni 15, 2017, 14:46:21 »
Siehe #1 erster Abschnitt. Da hatte ich es beigeschrieben.

Da ich es aber erst Dienstag testen kann, lass ihn den Thread solange noch ruhen.

Habt mir ja schon sehr geholfen. ;)
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1401
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #13 am: Juni 15, 2017, 18:16:14 »
Meine Bemerkung bezog sich nicht auf die Function sondern auf die Ereignisprozedur "AfterUpdate"
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Online Xoar

  • Access-Profi
  • **
  • Beiträge: 367
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #14 am: Juni 15, 2017, 23:12:16 »
Ja genau so hab ich es ja geschrieben, zumindest hab ich gedacht das man es auch so versteht ;D