Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: mad am Oktober 30, 2019, 09:18:28

Titel: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am Oktober 30, 2019, 09:18:28
Hallo Zusammen,

ich würde gerne in einem Formular "FormAdministrator" per setzen eines Häckchens im "Kontrollkästchen89" in einem anderen Formular "frm_Formauswahl_Kdt" den Button "btnPersonal" auf "Aktiviert" umstellen.

Dazu habe ich folgenden Code angesetzt:
Private Sub Kontrollkästchen89_AfterUpdate()
If Me.Kontrollkästchen89 = -1 Then
Forms.frm_Formauswahl_Kdt.btnPersonal.Enabled = True
Else
Forms.frm_Formauswahl_Kdt.btnPersonal.Enabled = False
End If
End Sub

leider kommt jetzt aber die Fehlermeldung wie im Anhang zu sehen.

Könnte mir jemand einen Tipp geben wo der Fehler liegt?

Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: silentwolf am Oktober 30, 2019, 09:51:09
Hallo,
die Form muß geöffnet sein dann sollte es funktionieren.
Wenn Du aber die Form geschlossen hast dann würde es so funktionieren.

Private Sub Kontrollkästchen0_Click()
    If Me.Kontrollkästchen0 = -1 Then
        ShowButtonForm
        Forms.frmButton.btnEnabled.Enabled = True
    Else
        ShowButtonForm
        Forms.frmButton.btnEnabled.Enabled = False
    End If
   
End Sub

Sub ShowButtonForm()
    DoCmd.OpenForm "frmButton"
End Sub


gibt vielleicht noch bessere Möglichkeiten aber so hab ich es mal probiert und geht.

HTH
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am Oktober 30, 2019, 10:34:02
Hallo silentwolf,

danke für die superschnelle Antwort. Habe es ausprobiert und es funktioniert.

Gibt es auch eine Möglichkeit ohne das dass Formular geöffnet ist bzw. geöffnet wird?
So das dass im Hintergrund abläuft.


Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: silentwolf am Oktober 30, 2019, 10:41:14
Hallo mad,

ZitatGibt es auch eine Möglichkeit ohne das dass Formular geöffnet ist bzw. geöffnet wird?
So das dass im Hintergrund abläuft.

hmm kann sein aber das weiß ich leider nicht.. aber wenn es im Hintergrund passieren soll dann ist es ja gar nicht zu kontrollieren was passiert ausser natürlich Du lässt eine Msgbox erscheinen das nun die Prozedur ausgeführt worden ist oder dergleichen.
Warum möchtest Du denn das? Was ist denn der Hintergrund Deines Vorhabens?

Gruß
Albert
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am Oktober 30, 2019, 11:02:27
Hallo,

habe jetzt festgestellt das die Umstellung des Buttons nur so lange aktiv ist, solange das Formular "frm_Formauswahl_Kdt" offen ist.

Was ist mein Vorhaben:
Ich möchte das ich als Admin entsprechende Buttons auf Formularen aktivieren oder deaktivieren kann, so daß der Anwender nur die aktiven Buttons ausführen kann. Das will ich über mein "FormAdministrator" für verschiedene Formulare und Buttons definieren.
Da ist aber Voraussetzung das die Aktivierung im entsprechende Formular bestehen bleibt bis der Button eventuell wieder deaktiviert wird.

Vielleicht sollte ich noch erwähnen das dass Kontrollkästchen aus der Tabelle "tabFormAdministrator_Buttons" kommt bzw. gespeichert wird.

Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: PhilS am Oktober 30, 2019, 11:39:04
Zitat von: mad am Oktober 30, 2019, 11:02:27
Vielleicht sollte ich noch erwähnen das dass Kontrollkästchen aus der Tabelle "tabFormAdministrator_Buttons" kommt bzw. gespeichert wird.
Dein Admin-Formular ist für die Ausführung bei den einzelnen Usern ziemlich irrelevant. Du musst immer die Werte aus der o.g. Tabelle lesen wenn von einem User ein Form geöffnet wird.

Schau dir mal den Download zu Karl Donaubauers "20 Tipps"-Vortrag von der letzten AEK (http://donkarl.com/?aek) an. Da gibt es genau dafür ein Beispiel.
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: trebuh am Oktober 30, 2019, 13:12:07
Hallo mad,

wenn Du das Kontrollkästchen in einer Tabelle gespeichert hast, dann brauchst Du ja nur beim öffnen des Formulars per VBA abfragen, ob das das Kontrollkästchen wahr oder falsch ist.

Dann kannst Du ja entsprechend ein oder mehrere Buttons und auch andere Steuerelemente gezielt aktivieren, einblenden etc.

Diese Abfrage musst Du dann halt in alle notwendigen Formulare einbauen.

Gruß
Hubert
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am Oktober 30, 2019, 14:31:43
Hallo trebuh,

das hört sich ja einfach an, habe es wie folgt versucht, will aber nicht funktionieren.
Wahrscheinlich liegt wieder an einer Kleinigkeit.

Hier mein aktueller Code:
Private Sub Form_Load()
  If tabFormAdministrator_Buttons.KK_kdt_peronal = 1 Then
  Forms.frm_Formauswahl_Kdt.btn_Personal.Enabled = True
    End If
End Sub


Bei der Anregung von PhilS bin ich noch am durchsehen.


Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am Oktober 30, 2019, 15:32:42
Hallo Zusammen,
habe was zu DCount gefunden und somit mein Problem in den Griff bekommen.

Private Sub Form_Load()
    If DCount("KK_kdt_personal", "tabFormAdministrator_Buttons", _
               "[KK_kdt_personal]= True")  Then
   
        Me!btn_Personal.Enabled = True
        Else
       Me!btn_Personal.Enabled = False

    End If
End Sub


Danke an alle.


Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am Oktober 30, 2019, 16:12:43
So,
jetzt habe ich mich zu früh gefreut. Ich dachte ich brauche jetzt nur den nächsten Button mit dranhängen und es funktioniert.
Pustekuchen.

Private Sub Form_Load()
  If DCount("KK_kdt_personal", "tabFormAdministrator_Buttons", _
               "[KK_kdt_personal]= True") Then
                Me!btn_Personal.Enabled = True
       End If
   If DCount("KK_kdt_grund", "tabFormAdministrator_Buttons", _
               "[KK_kdt_grund]= True") Then
                Me!btn_Grundeinstellung.Enabled = True
    End If
End Sub


Hätte doch noch jemand einen Tipp?


Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: PhilS am Oktober 30, 2019, 17:17:05
Zitat von: mad am Oktober 30, 2019, 16:12:43Pustekuchen.
Warum Pustkuchen?

Zitat von: mad am Oktober 30, 2019, 16:12:43Hätte doch noch jemand einen Tipp?
Schau dir das oben angeführte Beispiel an. - Dauert erstmal einen Moment, aber insgesamt dürftest du damit Zeit sparen.

Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: emmoticon am Oktober 30, 2019, 20:30:13
Hallo mad,

  If DCount("KK_kdt_personal", "tabFormAdministrator_Buttons", _
               "[KK_kdt_personal]= True") Then
                Me!btn_Personal.Enabled = True
       End If


An dem Code fehlt a) der Personenbezug und b) die Bedingung selbst.
Den Personenbezug kannst du herstellen, indem du im Formular beispielsweise ein Feld namens txbMitarbeiter reinschreibst. Wenn sich dann ein entsprechender User einloggt, wird dort sein Name hinterlegt. Diesen Namen kannst du dann verwenden um die Bedingung fuer die DomaeneFunktion zu machen.

Beispiel:
If Dlookup("[KK_kdt_personal]", "tabFormAdministrator_Buttons", "Mitarbeitername = '" & me.txbMitarbeiter & "'") = True then
  Me!btn_Personal.Enabled = True
End if
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am Oktober 31, 2019, 20:31:48
Hallo,

den Hinweis von emmoticon nehme ich gerne auf.

Aber vorher hätte ich noch eine Frage an PhilS, bin ich im Code vom "frmHorEndlos_sfrm" richtig?
Bin mir nicht ganz sicher.


Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: PhilS am Oktober 31, 2019, 21:13:31
Zitat von: mad am Oktober 31, 2019, 20:31:48
Aber vorher hätte ich noch eine Frage an PhilS, bin ich im Code vom "frmHorEndlos_sfrm" richtig?
Bin mir nicht ganz sicher.
Äh, nein, sorry. - Ich habe offenbar die Vorträge verwechselt. Das Beispiel zum Ausblenden und Sperren von Steuerelementen kam im DSGVO-Vortrag vor und nicht bei "20 Tipps". - Leider gibt es das Demo dazu nicht zum Download.

Der Irrtum tut mir leid. - Ich denke aber, dass deine Zeit beim Durchsehen der "20 Tipps" nicht verschwendet war, selbst wenn es nicht direkt zur Lösung des hier diskutierten Problems führt.
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am November 01, 2019, 06:40:55
Hallo emmoticon,

habe das mal so wie von Dir beschrieben anzuwenden versucht.
  If DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Me.UsernameGlobal & "'") = True Then
                Me!btn_Personal.Enabled = True


Setzt aber keine Buttons aktiv.
Ich vermute das es am ansprechen der Feldnamen "Klarname und UsernameGlobal" liegt, es kommt aber auch keine Fehlermeldung. Habe mal eine kleine Testdatei mit in den Anhang gegeben.
Bitte nicht wundern das die Tabellen, Formulare und diverse Feldnamen etwas anders heissen, ist dem geschuldet das ich meinen alten und den neuen Ansatz noch in einer DB ausprobiere.

Habe zu Testzwecken zwei User (user1 u. user2) angelegt. PW sind auch user1 u. user2.

Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: DF6GL am November 01, 2019, 09:47:49
Hallo,

die DB geht nicht mit den Codebeispielen und den bisherigen Beschreibungen konform...  >:(

Wenn formularübergreifende Referenzen auf Steuerelemente, bzw Daten erforderlich sind, sind globale Variablen (oder Tempvars-, Collections-Auflistung oder der Gebrauch des Openargs-Argumentes vorzuziehen. Diese sind vor der ersten Verwendung natürlich zu initialisieren, bzw. zu setzen.


Das ungebundene Feld  "UsernameGlobal" ist beim Laden des Forms noch nicht gesetzt (--> NULL) und demnach nicht brauchbar an dieser Stelle:

Private Sub Form_Load()
  If DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Me.UsernameGlobal & "'") = True Then
                Me!btn_Personal.Enabled = True
       End If
....


Wenn schon so, dann so:

ZitatPrivate Sub Form_Load()
  If DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Forms!formNeuesPWUsergruppe_Allg!Klarname & "'") = True Then
                Me!btn_Personal.Enabled = True
       End If
.
.
.

'''''''''''''''''''''''''''''''''''''''''''''''''bzw. besser:

Private Sub Form_Load()

Me!btn_Personal.Enabled = DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Forms!formNeuesPWUsergruppe_Allg!Klarname & "'")   

.
.
.


wobei hier ein evtl. anders ausgewähltes Form in "formNeuesPWUsergruppe_Allg"  nicht berücksichtigt ist.

Sollten die Einstellungen dynamisch erfolgen müssen, dann muss "nach Aktualisierung" des Forms "formNeuesPWUsergruppe_Allg" eine korrekte Referenzierung auf das (geöffnete) Ziel-Formular erfolgen:



Private Sub Form_AfterUpdate()

Forms!UG_frm_Formauswahl_Allg!btn_Personal.Enabled = DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Me!Klarname & "'")
.
.
.
.
End Sub



(Vorschläge an die Code-Konstruktion angepasst!)
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am November 01, 2019, 11:08:20
Hallo,

habe versucht mit folgendem Code zu arbeiten,
Private Sub Form_Load()
Me!btn_Personal.Enabled = DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Forms!formNeuesPWUsergruppe_Allg!Klarname & "'")
...
...
...

Dann bekomme ich aber den Laufzeitfehler 2450 "..kann das Formular "formNeuesPWUsergruppe_Allg".. nicht finden.

Habe auch folgendes versucht, und zwar "Me!UsernameGlobal = globalerBearbeiter" vom Ende des Codes nach oben verlegt.
Private Sub Form_Load()
   Me!UsernameGlobal = globalerBearbeiter
  If DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Me.UsernameGlobal & "'") = True Then
                Me!btn_Personal.Enabled = True
...
...


Aktuell funktioniert das auch.

Würde es aber trotzdem gerne optimieren wollen wie von DF6GL beschrieben.
Private Sub Form_Load()
Me!btn_Personal.Enabled = DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Forms!formNeuesPWUsergruppe_Allg!Klarname & "'")
...
...
...


Was übersehe ich?


Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: DF6GL am November 01, 2019, 11:53:20
Hallo,


Zitat
Was übersehe ich?

Die angegebenen Formulare müssen zwingend geladen sein....

Diese Systematik mit Dlookup und Formverweisen ist eher Flickwerk und beinhaltet latente Fehlersituationen.


Deshalb mein Hinweis, dass man besser (Public)-Variablen statt Form-Referenzen benutzen sollte....

Es wäre auch möglich, das einzustellende Form an die Steuertabelle zu binden und dann auf die Einstellungsfelder direkt zuzugreifen.

Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am November 02, 2019, 06:11:22
Hallo,
ZitatDie angegebenen Formulare müssen zwingend geladen sein....
geht leider nicht, denn das Formular "formNeuesPWUsergruppe_Allg" ist dem Admin vorbehalten. Sonst könnte jeder Anwender selbst seine Voreinstellungen vornehmen.

Habe es dann wie folgt ausprobiert,
Public Sub Form_Load()
  Me!UsernameGlobal = globalerBearbeiter
    Me!btn_Personal.Enabled = DLookup("KK_Allg_personal", "tabPWUsergruppe_Allg", "Klarname = '" & Me!UsernameGlobal & "'")

dann bekomme ich einen Laufzeitfehler 2465  ...kann das angesprochene Feld "UsernameGlobal" nicht finden.

Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: trebuh am November 02, 2019, 08:45:43
Hallo Mad,

was willst Du den eigentlich genau machen?
Soll jetzt jeder User bestimmte Dinge nicht machen dürfen, oder geht es eigentlich nur darum, das bestimmte Steuerelemente
nur für den Administrator vorenthalten sind?

In einem Beitrag hast Du geschrieben, daß es jetzt funktioniert.
ZitatHallo Zusammen,
habe was zu DCount gefunden und somit mein Problem in den Griff bekommen.

Code: [Auswählen]

Private Sub Form_Load()
    If DCount("KK_kdt_personal", "tabFormAdministrator_Buttons", _
               "[KK_kdt_personal]= True")  Then
   
        Me!btn_Personal.Enabled = True
        Else
       Me!btn_Personal.Enabled = False

    End If
End Sub


Danke an alle.
...

Und nur beim anhängen des nächsten Buttons wieder nicht.


ZitatSo,
jetzt habe ich mich zu früh gefreut. Ich dachte ich brauche jetzt nur den nächsten Button mit dranhängen und es funktioniert.
Pustekuchen.

Code: [Auswählen]

Private Sub Form_Load()
  If DCount("KK_kdt_personal", "tabFormAdministrator_Buttons", _
               "[KK_kdt_personal]= True") Then
                Me!btn_Personal.Enabled = True
       End If
   If DCount("KK_kdt_grund", "tabFormAdministrator_Buttons", _
               "[KK_kdt_grund]= True") Then
                Me!btn_Grundeinstellung.Enabled = True
    End If
End Sub


Hätte doch noch jemand einen Tipp?
...

der Unterschied an dem beiden Code´s ist die fehlende "ELSE"- Bedingung.

Gruß
Hubert

Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: DF6GL am November 02, 2019, 09:18:14
Halo,

Zitatgeht leider nicht, denn das Formular "formNeuesPWUsergruppe_Allg" ist dem Admin vorbehalten

Wie schon gefragt: Was willst Du denn überhaupt genau machen (Bedienungsablauf)?

Zitat aus meinem vorangehenden Beitrag:
ZitatDiese Systematik mit Dlookup und Formverweisen ist eher Flickwerk und beinhaltet latente Fehlersituationen

Du solltest Dir zunächst ein besseres und funktionierendes Konzept überlegen.
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: trebuh am November 02, 2019, 13:57:25
Hallo Mad,

anbei mal eine Testdatenbank.

Gruß Hubert
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am November 02, 2019, 14:02:53
Hallo Zusammen,

was ist mein Ziel:
Über das Formular "formNeuesPWUsergruppe_Allg" möchte ich verschiedene User anlegen und darüber steuern welche Buttos im Formular "UG_frm_Formauswahl_Allg" für den jeweiligen User aktiviert sind. Das Formular "formNeuesPWUsergruppe_Allg" soll aber nicht geöffnet sein um die Buttons auf dem Formular "UG_frm_Formauswahl_Allg" entsprechend zu aktivieren.

Zur Info:
Das öffnen des Formulars "formNeuesPWUsergruppe_Allg" ist bereits definiert und wie gesagt nur dem Admin vorbehalten. Nur in der  Beispiel-DB "PW_NEU_TEST.zip" ist es ohne PW möglich.


Gruss
mad

Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am November 02, 2019, 14:11:36
Ja,
so hätte ich mir das vorgestellt.
Allerdings ohne das UF im HF. Aber habe gesehen das es auch ohne funktioniert.

Jetzt habe ich allerdings die Anregung von GF6GL
ZitatDiese Systematik mit DLookup und Formverweisen ist eher Flickwerk und beinhaltet latente Fehlersituationen
noch nicht berücksichtig, da auch Du die "DLookup" verwendest.

Gruss
mad
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: trebuh am November 02, 2019, 15:23:34
Die Tabelle im Formular dient nur zum Vergleichen, welche Buttons aktiv sind.

Wie Du es jetzt in Deine Anwendung umsetzt, überlasse ich Dir.
Wie Du siehst ist es kein Pustekuchen  ;D
Gruß Hubert
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: MzKlMu am November 02, 2019, 17:26:07
Hallo,
Zitatgeht leider nicht, denn das Formular "formNeuesPWUsergruppe_Allg" ist dem Admin vorbehalten.
man kann eine Formular auch unsichtbar (acHidden) öffnen.
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: DF6GL am November 02, 2019, 20:15:35
Hallo,

den ganzen Thread könnte man verkürzen und zum Ziel kommen, wenn mein Vorschlag zum gebundenen Form realisiert würde...


Habe Dir mal die Fleißarbeit abgenommen. 

(Tabellen sind wegen Vereinfachung der Tests in das FE importiert)
Titel: Re: Button in einem anderen Formular per Kontrollkästchen aktivieren
Beitrag von: mad am November 03, 2019, 09:03:54
Vielen vielen Dank für die Unterstützung.

Werde die Kurzform in meine Original-DB einbauen.


Danke nochmals
mad