Gleiche UserForms mit unterschiedlichen Namen ansprechen

Moderator: ModerationP

Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon Enorix » 20. Okt 2021, 11:28

Hallo,

kann mir hier jemand den entscheidenden Tipp geben?

Ich habe drei UserForms, welche alle gleiche aufgebaut sind.
UserFormAbteilungA hat zwei Textfelder und zwei Buttons (Übernehmen und Abbrechen).
UserFormAbteilungB hat zwei Textfelder und zwei Buttons (Übernehmen und Abbrechen).
UserFormAbteilungC hat zwei Textfelder und zwei Buttons (Übernehmen und Abbrechen).

Die Elemente auf den UserForms haben alle die gleichen Namen.

(Der einzige Unterschied ist, dass ich noch drei Buttons habe, die die Textfelder mit unterschiedlichen Default-Texten befüllen.)

Frage: Wie kann ich das jeweilige Abteilungs-Userform aufrufen, ohne, dass ich dafür drei unterschiedliche Click-Proceduren schreiben muss?
Die Bedingung, welches UserForm aufgerufen wird, steht in einer Zelle. Steht in der Zelle Abteilung A, dann soll Userform A aufgerufen werden... usw.
Mein Code würde ich z.B. so schreiben:

Code: Alles auswählen
sub UserFormTest
Dim ufm_GeneralUserForm   as userform

select case .cells(1,1)
   case "Abteilung A"
      set ufm_GeneralUserForm = UserFormAbteilungA
   case "Abteilung B"
     set ufm_GeneralUserForm = UserFormAbteilungB
....
end select

'da die Elemente auf den unterschiedlichen Userforms alle gleich heißen, würde ich sie gern wie folgt ansprechen
ufm_GeneralUserForm.TextBox1.Value = "blablabla"

ufm_GeneralUserForm.Show
end sub


Leider geht diese Variante nicht. Weiß jemand einen Rat. Danke.

Viele Grüße
Mario
Bin kurz Kaffee holen...
Enorix
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 85
Registriert: 30. Sep 2018, 19:38

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon knobbi38 » 20. Okt 2021, 11:51

Hallo Mario,

wenn die UFs alle gleich sind, brauchst du auch nur eine, die dann unterschiedlich initialisiert wird. Das kannst du dir auf jeden Fall schon mal sparen. Für die unterschiedliche Initialisierung erstellst du Sub, welche dann von den drei Buttons mit einem Argument aufgerufen wird. In der Sub wertest du dann den Parameter aus und intialisiert entsprechend dein UF.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon Enorix » 20. Okt 2021, 12:42

Hallo Ulrich,

danke für deine Rückmeldung.
Ja stimmt, eine unterschiedliche Initialisierung wäre auch denkbar. Das wird mir aber etwas zu umständlich. Ich habe mein Problem unten etwas vereinfacht, um meine Frage auf das Wesentliche zu reduzieren.

Habe jetzt aber die Lösung durch rumprobieren gefunden.
Ich muss meine Variable vom UserForm "ufm_GeneralUserForm" als Object deklarieren und nicht als Userform. Dann geht es so wie in meinem Code.

Also so:
Code: Alles auswählen
sub UserFormTest
Dim ufm_GeneralUserForm   as Object

select case .cells(1,1)
   case "Abteilung A"
      set ufm_GeneralUserForm = UserFormAbteilungA
   case "Abteilung B"
     set ufm_GeneralUserForm = UserFormAbteilungB
....
end select

'da die Elemente auf den unterschiedlichen Userforms alle gleich heißen, würde ich sie gern wie folgt ansprechen
ufm_GeneralUserForm.TextBox1.Value = "blablabla"

ufm_GeneralUserForm.Show
end sub
Bin kurz Kaffee holen...
Enorix
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 85
Registriert: 30. Sep 2018, 19:38

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon knobbi38 » 20. Okt 2021, 13:44

Hallo,
Das wird mir aber etwas zu umständlich.

Entschuldige, aber das verstehe ich nicht. Deine Lösung ist doch viel umständlicher. Anstatt eine UF zu pflegen mußt du jetzt 3 pflegen und dein Code wird sicherlich nicht einfacher, wenn du etwas ändern möchtest.
Gut, "quick and dirty" geht natürlich immer, aber dann möchtest du offensichtlich nichts dazulernen.

Dann kann ich dir auch nicht weiter helfen ...

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon Enorix » 21. Okt 2021, 15:50

Hallo Ulrich,

natürlich lerne ich immer gern dazu :-)

Mein "Umständlich" bezog sich auf folgenden Sachverhalt, den ich in meiner ursprünglichen Anfrage aus Gründen der einfacheren Darstellung nicht angegeben habe.

Die Formulare enthalten wie erwähnt jeweils zwei Textboxen. Textbox 1 wird mit einem Bemerkungstext befüllt, der in eine selektierte Zelle eingetragen wird, wenn man auf den "Übernehmen" Button klickt.
Die Textbox 2 enthält den Text, der bereits in der selektierten Zelle stand. Die Zelle selbst dient zur Erfassung von Hinweistexten/Kommentaren. Durch das Formular wird die Erfassung von Hinweistexten unterstützt, indem z.B. auch das aktuelle Datum und der Benutzername mit automatisch in die Zelle bei Klick auf "Übernehmen" eingetragen werden. So kann man nachvollziehen, wer wann etwas geändert hat.

Um die Erfassung von Hinweisen in den Formularen zu vereinfachen gibt es noch mehrere Default-Text Buttons über die in der Textbox 1 automatisch Standard-Texte übernommen werden. So spart man sich etwas Zeit.

Nun kann das Formular (oder die Formulare) von unterschiedlichen Bereichen aufgerufen werden. Bereich A braucht hierbei 8 Buttons für 8 Standardtexte und Bereich B brauch nur 4 Buttons für 4 Standardtexte und Bereich C braucht 5 Buttons für 5 Standardtexte.

Wenn ich es in einem Formular umsetzen müsste, würde ich die Maximalanzahl an Standardtext-Buttons aufnehmen. Dann würde ich mit einer if oder select case Bedingung abprüfen, welcher Bereich das Formular aufgerufen hat (die Bereiche verwenden unterschiedliche Spalten, anhand dessen ich es ermitteln könnte). Dann würde ich mit der Visible- und Caption-Eigenschaft die Beschriftung und Sichtbarkeit der Buttons je nach Bereich entsprechend unterschiedlich steuern. Anhand der Standardtext-Button-Beschriftung würde ich den entsprechenden Standardtext ermitteln und in Textbox 1 eintragen.

Das fand ich etwas umständlich, weil ich die ganzen Prüfungen einbauen muss.

Aber wenn du einen effizienteren Weg weißt, bin ich ganz Ohr :-D

Viele Grüße
Mario
Bin kurz Kaffee holen...
Enorix
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 85
Registriert: 30. Sep 2018, 19:38

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon knobbi38 » 21. Okt 2021, 18:34

Hallo Mario,

das sollte doch kein Problem sein.

Nur mal so als Idee:
  • das Formular wird per Sub aufgerufen und der aufrufende Bereich als Argument mitgegeben (keine Prüfung mit select/case)
  • aus einem Konfigurationssheet mit einer entsprechenden Tabelle werden die benötigten Initialisierungsdaten ausgelesen und den Steuerelelementen zugewiesen
Ganz "normales" Vorgehensweise.

Alternativ gibt es in der objektorientierten Programmierung z.B.MVP or MVC Entwurfsmuster, die man dafür heranziehen könnte, muß aber nicht sein.
Hier mal eine Webseite, wo das MVC Pattern mit einem Sheet praktisch umgesetzt worden ist. Es gibt auch, etwas versteckt, einen Link für eine gleichwertige Umsetzung mit MSForms:
https://datapluscode.com/general/mvc-design-pattern-in-excel-vba/

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon Kuwe » 21. Okt 2021, 21:33

Hallo Mario,

hast Du Dich schon mal mit dem Register-Element (TabStrip) beschäftigt?. Das ist genau für so etwas gedacht.
Gruß Uwe
Benutzeravatar
Kuwe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6675
Registriert: 30. Dez 2003, 18:37

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon snb » 22. Okt 2021, 09:57

@Knobbi

Ich hab mal den MVC-Link angesehen.

Der Typ dort hat ein sehr redundante Vorgehensweise,; offensichtlich is er nicht bekannt mit Excel Objekten wie Range, Row, Column, Listobjects, Listboxes, Multipages, usw. Das einzig wichtige ist das Unterscheid zwischen Daten, UI und Representation von Daten.
Ich würde den Link nie empfehlen.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8878
Registriert: 25. Sep 2014, 16:37

Re: Gleiche UserForms mit unterschiedlichen Namen ansprechen

Beitragvon knobbi38 » 22. Okt 2021, 12:07

@snb:
Habe leider auf die Schnelle kein besseres Beispiel in VBA gefunden, aber es ging mir erstmal nur darum, daß Prinzip aufzuzeigen und das es solche Möglichkeiten auch in VBA/Excel gibt.

In Ermangelung eines besseren Beispiels lasse ich den Link zunächst erstmal im Beitrag stehen.

Vielen Dank für deinen Hinweis
Grüße Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Klaus-Dieter und 25 Gäste