AC97 - Eigenschaft Schaltfläche ändern

`n Abend zusammen,

ich stehe wiedermal vor einem schier unlösbaren Problem.

In meiner DB habe ich ein Formular, in dem meine Tabellen angezeigt werden. Da alle Tabellen die gleiche Struktur aber unterschiedliche Inhalte haben, arbeite ich nur mit dem einem Formular , dessen Datensatzherkunft (Recordsource) ich mittels VBA jederzeit wechseln kann.

Die Anforderung jetzt ist folgende:

In diesem Formular gibt es eine Schaltfläche, die eine bestimmte Prozedur(mehrere Abfragen hintereinander) ausführt. Die Art der Abfragen ist ähnlich aber nicht gleich, weil abhängig von der jeweiligen Tabelle.

Ich möchte also bei einem Recordsource-Wechsel auch gleich den Verweis dieser Schaltfläche auf die entsprechende Abfrageprozedur lenken.

z. B.

if form.recordsource = "Tabelle45" then
schaltfläche.beimklicken = "=bestimmte\_prozedur()"

Ist sowas überhaupt möglich?

Falls ja, freue ich mich riesig über Eure Antworten.

Danke jetzt schonmal …

gruss Andy

Ich möchte also bei einem Recordsource-Wechsel auch gleich den
Verweis dieser Schaltfläche auf die entsprechende
Abfrageprozedur lenken.

Warum nicht einfach eine Ereignisfunktion schreiben, die dann die jeweilige Funktion aufruft? Etwa so:

Private Sub Button_Click()
Select Case Form.Recordsource
Case Is = „Tabelle1“
Tabelle1_Sub
Case Is = „Tabelle2“
Tabelle2_Sub
Case Is = „Tabelle3“
Tabelle3_Sub
End Select
End Sub

Alternativ könnte man auch mit einer geschickten Wahl der Abfrage- bzw. Formularnamen arbeiten, das kommt aber darauf an, was genau Du machen willst. Wenn es etwa darum geht, abhängig von der aktuellen Tabelle ein Formular zu öffnen, genügt es, diesen Formularen geeignete Namen zu geben, etwa „frm_Tabellenname“. Die Ereignisroutine für die Schaltfläche könnte dann etwa so aussehen:

Private Sub Button_Click()
DoCmd.OpenForm „frm_“ + Form.Rcordsource
End Sub

Wie gesagt, das hängt davon ab, was genau Du machen willst.

Marc

Ich möchte also bei einem Recordsource-Wechsel auch gleich den
Verweis dieser Schaltfläche auf die entsprechende
Abfrageprozedur lenken.

Warum nicht einfach eine Ereignisfunktion schreiben, die dann
die jeweilige Funktion aufruft? Etwa so:

Marc

Hallo Marc,

erstmal danke für Deine Mühe.

Ich hab mir jetzt eine ReferenzTabelle eingerichtet, die alle erforderlichen Prozeduren für die jeweiligen Tabellen ins Formular steuert.

Darunter ist auch ein Feld namens „ProzName“.

Meine Schaltfläche sollte dann jeweils die Prozedur auslösen, die in diesem Feld gespeichert ist. Nicht schön ist dagegen, auf welchem Weg das geschieht:

 Docmd.OpenModule "ModulName", Me.[MeineProzedur] 

öffnet leider nur das jeweilige Prozedurfenster, löst aber sonst keine weitere Aktion („Ausführen“) aus.

Gibt´s da noch eine Möglichkeit?

gruss Andy

1 Like

Darunter ist auch ein Feld namens „ProzName“.

Docmd.OpenModule „ModulName“, Me.[MeineProzedur]

öffnet leider nur das jeweilige Prozedurfenster, löst aber
sonst keine weitere Aktion („Ausführen“) aus.
Gibt´s da noch eine Möglichkeit?

Ich habe jetzt leider keine Möglichkeit, das auszuprobieren aber vielleicht bringen Dich ja die VBA-Funktion „Eval“ oder die Makro-Funktion „AusführenCode“ weiter. Evtl. kannst Du diese Begriffe auch als Einstieg in die Online-Hilfe verwenden und von dort aus der Lösung näher kommen.

Marc

Hallo Marc,

manchmal habe ich wirklich Tomaten auf den Augen!

Dein Tipp mit EVAL war goldrichtig!

Hier die Proz dazu:

Sub CodeAusfuehren\_Click() 'Schaltfläche "CodeAusführen" 


Eval Me.MeineProzedur & "()" 

'MeineProzedur = Feld, in der die Prozedur eingetragen wird (aus Referenztabelle)



End Sub 

Danke vielmals

gruss moritzbock

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]