Anzeige
Archiv - Navigation
1892to1896
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Zugriff von UserFormen aufeinander
20.08.2022 19:08:39
UserFormen
Hallo zusammen,
wie kann ich von einer UserForm1 auf den Code einer UserForm2 zugreifen, im Speziellen, auf den Code der einem weiteren CommandButton2 der Userform2 zugeordnet ist?
Hintergrund ist, dass ich in unterschiedlichen Tabellenblättern unterschiedliche UserFormen angelegt habe. Zum Teil sollen aber exakt die gleichen Befehle ausgeführt werden.
Das hier funktioniert nicht:

Private Sub CommandButton1_Click()
Call UserForm2.CommandButton2_Click
End Sub
Vielen Dank im voraus!
LG
Anni

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zugriff von UserFormen aufeinander
20.08.2022 19:35:06
UserFormen
hi Anni,
du musst dein Makro, welches direkt in Userform2.CommandButton2_Klick steht, in ein allgemeines Modul auslagern.
Wenn du das getan hast, kannst du dieses Makro (und jedes andere) aus jedem Userform aufrufen.
Vom Prinzig sollte es so aussehen:

'allgemeines Modul
Sub ButtonKlick
'hier das Makro, was direkt in Userform2.CommandButton2 steht
End Sub

'z Bsp in Userform1
Private Sub CommandButton1_Click()
ButtonKlick
End Sub

'z Bsp in Userform2
Private Sub CommandButton2_Click()
ButtonKlick
End Sub
Hilfts?
Ciao
Thorsten
Anzeige
AW: Zugriff von UserFormen aufeinander
20.08.2022 19:44:32
UserFormen
Hallo Thorsten,
vielen Dank dafür.
LG
Anni
AW: Zugriff von UserFormen aufeinander
20.08.2022 20:43:30
UserFormen
Verzichte auf mehreren Userforms pro VBAprojekt.
AW: Zugriff von UserFormen aufeinander
21.08.2022 09:59:09
UserFormen
Hallo snb,
der Beitrag ist nicht hilfreich, eher überflüssig, du könntest auch schreiben: Verzichte auf vba.
VG
AW: Zugriff von UserFormen aufeinander
21.08.2022 17:47:29
UserFormen
Naja, ganz so sinnlos ist der Vorschlag von snb nicht.
snb ist halt nur ein kleiner Motzki, der gerne auf Fehler hinweist, aber dann nicht mehr in der Lage ist, zu erklären, wie es besser geht, dafür ist sich der Herr dann zu fein oder zu schreibfaul.
Wenn du beispielsweise für die verschiedenen Tabellenblätter unterschiedliche Inhalte in der Userform benötigst, könntest du auch eine einzige Userform erstellen mit einer MultiPage mit einer Seite für jedes Tabellenblatt.
Die seitenspezifischen Userforminhalte platzierst du dann auf der jeweiligen Multipage-Seite, und Steuerelemente, die auf jeder Seite benötigt werden, platziert du im normalen Bereich der Userform
Das hat den Vorteil, dass du diese Steuerelemente dann nur einmal erstellen und programmieren musst und nicht mehrfach.
Und statt mit mehreren Userformen hin- und her zu jonglieren, schlägst du einfach die passende Seite der MultiPage auf.
Auch ist der Datenaustausch zwischen den einzelnen Steuerelementen dann einfacher.
Ob es sinnvoller ist, für jedes Blatt eine eigene Userform zu erstellen oder wie hier beschrieben mit einer Userform zu arbeiten hängt natürlich auch davon ab, wie stark unterschiedlich die einzelnen Userformen sind. Je mehr gemeinsame Steuerelemente es gibt, die mit gleichem Code auf mehreren Userformen angewendet werden, um so sinnvoller ist es, mit einer Userform zu arbeiten und die Unterschiede in der Multipage abzubilden.
Für mehrere Userformen würde auch sprechen, wenn du sehr viele Blattspezifische Steuerelemente mit umfangreichen Code hast, so dass es mit einer einzigen Userform sehr unübersichtlich würde.
Gruß Daniel
Anzeige
AW: Zugriff von UserFormen aufeinander
21.08.2022 18:50:52
UserFormen
Hey Daniel,
danke für die Erläuterung, das kann ich nun besser nachvollziehen. Ich habe tatsächlich "Multipages" auf unterschiedlichen Tabellenblättern. Diese nun noch zusätzlich mehreren Tabellenblättern zugängig zu machen, wäre erst einmal sehr unübersichtlich für mich. Ich habe ein Tabellenblatt "Bearbeitung", auf dem ich in einer "Multipage" mit ganz anderer Optik, ein paar wichtige Hauptprozeduren zusammengefasst habe (ohne das Programm noch weiter aufzublasen). Was mir nun auch gut mit eurer Hilfe gelungen ist.
Wenn man hier im Forum eine Frage stellt, will ja keiner im Detail alle Hintergründe kennen, warum die Frage gestellt wird. Wenn es von der Prozedur nicht total absurd erscheint, kann man ja antworten oder eben nicht. Ich hätte auch kein Problem, wenn mir jemand erklärt, das das Quatsch ist, was ich da verknüpfen möchte, aus nachvollziehbaren Gründen. Ich habe mich schon seehr viele Stunden mit VBA beschäftigt und mein Programm bearbeitet... und bin trotzdem noch Anfänger und habe sicherlich noch nicht alle sinnvollen Anwendungen im Bereich Userform durchblickt, aber so ist es nun mal. Ich finde es allerdings total toll, dass so viele Leute hier im Forum immer super Tipps geben und ich immer wieder ein Stückchen weiterkomme, wenn es mal hakt!
LG
Anni
Anzeige
AW: Zugriff von UserFormen aufeinander
21.08.2022 07:01:17
UserFormen
Du musst eine
Procedur (z.B. in ein eigenes Modul) schreiben, diese als Public deklarieren.
Dann kannst du von jeder UserForm, jedem Button darauf zugreifen in dem du sie mit Call Prozedur aufrufst..
Du kannst natürlich auch dann z.B. Variablen/Werte dann in die Procedur mit übernehmen...
Z.b. in Modul 1

public Sub Textausgabe()
MsgBox " hier steht dein Text", vbOKOnly
End Sub
in den Command Buttons von UserForm1 und UserForm 2 steht dann z.b.:

' weiterer Code
call Textausgab
'weiterer Code
Übergabe mit Werten, Prozedur in Modul 1:

public Sub TextAusgabe (name as String)
MsgBox "Hallo " & name,vbOKOnly
End Sub
in in CMD Button z.B.

Dim name as String
name = "Helmut"
call  TextAusgabe(name)
wichtig ist die Sichtbarkeit public
Und es dürfen keine 2 Prozeduren mit public den gleichen Namen haben.
Anzeige
AW: Zugriff von UserFormen aufeinander
21.08.2022 09:25:48
UserFormen
Hi,
Public Sub...
is nicht erforderlich - probier das Ganze doch mal ohne Public aus - geht auch.
Ciao
AW: Zugriff von UserFormen aufeinander
21.08.2022 09:56:44
UserFormen
Hallo Thorsten, hallo Marc,
ich habe das ohne public ausprobiert und funktioniert super. Auch die Methode über "public" zur Variablen-Übergabe ist sehr hilfreich. Vielen Dank!
Viele Grüße
Anni
AW: Zugriff von UserFormen aufeinander
21.08.2022 10:19:37
UserFormen
Hi Anni,
ja, sorry, ich meinte nicht dich mit meinem Hinweis wegen Public Sub.... ich meinte den Marc Franz. (dass doch er mal probieren soll, was er an Tipps weitergibt)
Ich hätte doch besser mit vollständiger Anrede arbeiten sollen.
Ciao
Thorsten
AW: Zugriff von UserFormen aufeinander
21.08.2022 17:27:19
UserFormen
"Public" ist die Default-Eigenschaft, dh diese wird von VBA angenommen, wenn der Programmierer diesbezüglich keine Anweisungen gegeben hat.
Wenn man weiß, was in der jeweiligen Situation Default ist, kann man das weglassen, aber explizit hinschreiben was man haben will, ist auch kein Fehler.
Anzeige
AW: Zugriff von UserFormen aufeinander
21.08.2022 17:50:39
UserFormen
nö, n Fehler is es nich, Daniel, aber wenn man 30 oder mehr Subs geschrieben hat - ohne Public - davor, hat man a) einiges an Zeit gespart und b) die Gefahr wegen Tippfehler umgangen und weil man nicht gemachte Tippfehler nich korrigieren muss, noch mehr Zeit gespart...
AW: Zugriff von UserFormen aufeinander
22.08.2022 12:15:56
UserFormen
Tippst du im ETA- oder im Adler-System?
AW: Zugriff von UserFormen aufeinander
22.08.2022 12:29:53
UserFormen
wer was wann wie wo warum tut, spielt doch gar keine Rolle^^...denn auch, wenn du der schnellste Tipper der Welt bist, sparst du Zeit, wenn du manches - gar nich - tippen musst^^
AW: Zugriff von UserFormen aufeinander
22.08.2022 15:54:35
UserFormen
Wenn ich eine Public Sub haben will, habe ich schneller "Public" getippt als drüber nachgedacht, ob jetzt Public oder Private der Default ist. Es gibt wichtigere Dinge, die man im Kopf haben muss als die Defaultwerte für jede Eigenschaft.
Anzeige
AW: Zugriff von UserFormen aufeinander
22.08.2022 17:49:22
UserFormen
jo, Daniel, du hast recht + ich hab mei Ruh^^
du wolltest spielen
22.08.2022 19:09:03
Daniel
deine Ruhe hättest du auch früher haben können.
AW: du wolltest spielen
22.08.2022 19:52:14
Oberschlumpf
du hast aber nich immer recht auch wenn du's immer wieder haben willst...hast du nur mit mir dieses Problem oder generell?
AW: du wolltest spielen
23.08.2022 14:40:09
Daniel
Ja gut du hast recht
Wieviel Lebenszeit hast du bisher gespart, dass du das "Public" weggelassen hast?
Wenn man beim Programmieren wirklich die Zeit bemerkt, um 7 Zeichen zu tippen, dann wird höchste Zeit für einen Schreibmaschinenkurs. Eine Schreibkraft, die einfach nur was abtippt, könnte ich ja verstehen, aber als Programmierer verbrauchst du doch schon viel mehr Zeit, ilum dir zu überlegen was der richtige Name für dein Makro ist. Da sollte das Tippen von 7 Zeichen nicht ins Gewicht fallen.
Anzeige
AW: du wolltest spielen
23.08.2022 15:25:56
Anni
Hallo ihr Lieben, jetzt muss mal gut sein. Jeder macht das eben so, wie er es sich besser merken kann bzw. wie er sich damit wohl fühlt. Da ist nichts richtig oder falsch.
By the way, da hab ich ein anderes Problem, bei dem ihr mir vielleicht auf die Sprünge helfen könnt: Ich möchte einen USB-Stick einlesen, der eine bestimmte Datei enthält, aus dieser Datei werden Daten genommen und auf dem Rechner in eine Datei übergeben bzw. Daten überschrieben ..... das funktioniert auch. Allerdings wenn diese Datei nicht vorhanden ist, gibt es logischer Weise eine Fehlermeldung. Schwierigkeiten gibt es auch, wenn mehrere Sticks gesteckt sind. Habt ihr dazu eine Idee?
VG
Anni
Anzeige
AW: du wolltest spielen
23.08.2022 15:43:25
Daniel
Bevor du die Datei mit Worbooks.Open öffnest, kannst du mit DIR(Pfad\Datei) überprüfen, ob die Datei vorhanden ist. Wenn ja, gibt DIR den Dateinamen aus, wenn nein nur "".
Wenn mehrere Sticks gleichzeit gesteckt werden können, kannst du so mehrere Laufwerksbuchstaben durchtesten.
Gruß Daniel
AW: du wolltest spielen
23.08.2022 17:21:37
Anni
Danke, Daniel. Hab jetzt lange ausprobiert, dieser Schnipsel funktioniert nun:
Hab immer Probleme mit Klammern, Doppelpunkte....
If Len(Dir("DrvType.Path\Instructions.doc")) = 0 Then
MsgBox "This file does NOT exist."
Else
MsgBox "This file does exist."
End If
VG
Anja
Anzeige

242 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige