Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: dynamische Userform

dynamische Userform
28.03.2006 19:45:34
Cold
hallo zusammen!
ich bin hier ziemlich neu (mein erster Beitrag) und hab mal ne Frage!
Es ist ja möglich eine userform dynamisch zu erzeugen.
z.B.

Private Sub UserForm_Initialize()
Dim lbl1 As MSForms.Label
Set lbl1 = Me.Controls.Add("Forms.Label.1", , True)
With lbl1
.Top = 6
.Left = 9
.Width = 90
.Height = 18
.Caption = "Hallo Welt"
End With
End Sub

nun die Frage ist es möglich dies auch per makro anzusprechen, so dass wenn ich die userform lade nur noch die jeweilige sub aufrufe.
ich weiß das ich dafür eine biblothek brauche
"Microsoft Visual Basic x.0 Extensibility" die ich auch über die verweise lade.
vielleicht hat ja jemand einen Ansatz oder gar ne Lösung für mich
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dynamische Userform
28.03.2006 20:16:29
Cold
jup chris in der art hab ich was gesucht hilft mir auf alle fälle erst mal weiter.
ich schau mir mal den code genauer an weil die userform nicht unbedingt erzeugt werden muß sondern nur deren Inhalt aber das ist schon mal supi ;-)
danke chris für die diese schnelle Hilfe
Cold
Anzeige
AW: dynamische Userform
28.03.2006 20:22:40
ChrisL
Hallo
ach so... bedeutend einfacher

Sub t()
Dim lbl1 As MSForms.Label
Load UserForm1
Set lbl1 = UserForm1.Controls.Add("Forms.Label.1", , True)
With lbl1
.Top = 6
.Left = 9
.Width = 90
.Height = 18
.Caption = "Hallo Welt"
End With
UserForm1.Show
End Sub

cu
Chris
Anzeige
AW: dynamische Userform
28.03.2006 20:33:50
Cold
ohla ja das ist wesentlich kürzer aber lässt sich dann eigentlich der Commandbutton noch ansprechen und kann ich den auch in eine eigene sub schreiben.
z.B.
Sub t()
Dim lbl1 As MSForms.Label
Dim cmd1 As MSForms.CommandButton
Load UserForm1
Set lbl1 = UserForm1.Controls.Add("Forms.Label.1", , True)
With lbl1
.Top = 6
.Left = 9
.Width = 90
.Height = 18
.Caption = "Hallo Welt"
End With
Set cmd1 = UserForm1.Controls.Add("Forms.Label.1", cmd1, True)
With cmd1
.Top = 25
.Left = 9
.Width = 90
.Height = 18
.Caption = "drück mich"
End With
sCode = "

Private Sub cmd1_Click()" & vbLf
drück_mich
sCode = sCode & "End Sub
" & vbLf & vbLf
UserForm1.Show
End Sub
Sub drück_mich()
sCode = sCode & " MsgBox ""Wert aus der Label: "" & lbl1.Text" & vbLf
End Sub
so in der Art
Gruß Cold
Anzeige
AW: dynamische Userform
28.03.2006 20:50:51
ChrisL
Hallo
Dafür musst du vermutlich den VBA-Code in das entsprechende Klassenmodul schreiben. Mittels VBA möglich, aber habe den Code nicht zur Hand. Bist aber eher wieder bei der ersten Variante angelangt mit VBProject.VBComponents oder ähnlich.
Tip: Forumssuche ;-)
Gruss
Chris
AW: dynamische Userform
Cold
naja irgendwie muss ja auch Leben in die Form die soll ja was machen aber hilfreich war das alle mal ich werd mal schauen ob ich was find und wenn nicht kann ich ja auch mit withevents in der userform die button ansprechen. ich werd morgen mal ein bißchen rumprobieren und wenn ich ne lösung hab (oder denk eine zu haben) poste ich sie hier mal.
Danke chris
bis denne Cold
Anzeige
AW: dynamische Userform
01.04.2006 16:54:52
Cold
so liebe Forum-Gemeinschaft
nachdem ich die letzten Tage mich durch den Code gewusselt habe und dann auch noch was zum Laufen kriegte dachte ich mir warum sollte ich das anderen vorenthalten.
https://www.herber.de/bbs/user/32522.xls
Da kann man sich mal anschauen was ich meinte. Danke an dieser Stelle an Chris der mir nützliche Tipps und Beispiele geben konnte.
Wenn jemand noch was weiß zu dem Thema nur her damit.
so dann ein schönes Wochenende
TCold
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dynamische Userform in Excel VBA erstellen


Schritt-für-Schritt-Anleitung

Um eine dynamische Userform in Excel VBA zu erstellen, kannst du folgende Schritte befolgen:

  1. Userform erstellen: Öffne den VBA-Editor (Alt + F11) und füge eine neue Userform hinzu.

  2. Code in die Userform einfügen: Füge den folgenden Code in das Codefenster der Userform ein:

    Private Sub UserForm_Initialize()
       Dim lbl1 As MSForms.Label
       Set lbl1 = Me.Controls.Add("Forms.Label.1", , True)
       With lbl1
           .Top = 6
           .Left = 9
           .Width = 90
           .Height = 18
           .Caption = "Hallo Welt"
       End With
    End Sub
  3. Userform laden: Verwende den folgenden Code in einem Modul, um die Userform zu laden und anzuzeigen:

    Sub t()
       Load UserForm1
       UserForm1.Show
    End Sub
  4. Dynamische Controls hinzufügen: Du kannst auch andere Steuerelemente wie Buttons dynamisch hinzufügen. Beispiel:

    Dim cmd1 As MSForms.CommandButton
    Set cmd1 = UserForm1.Controls.Add("Forms.CommandButton.1", , True)
    With cmd1
       .Top = 25
       .Left = 9
       .Width = 90
       .Height = 18
       .Caption = "drück mich"
    End With

Häufige Fehler und Lösungen

  • Fehler: "Benutzerdefinierte Klasse nicht gefunden"

    • Lösung: Stelle sicher, dass du die richtige Bibliothek ("Microsoft Visual Basic x.0 Extensibility") in den Verweisen aktiviert hast.
  • Fehler: Steuerelement wird nicht angezeigt

    • Lösung: Überprüfe, ob die Userform richtig initialisiert wurde und die Steuerelemente im Code korrekt hinzugefügt werden.

Alternative Methoden

Eine alternative Methode, um ein dynamisches Formular zu erstellen, besteht darin, den Code in Klassenmodulen zu verwenden. So kannst du die Logik und die Benutzeroberfläche voneinander trennen.

Hier ist ein Beispiel, wie du eine Userform mit einer Klasse verwalten kannst:

  1. Erstelle eine Klasse (z.B. clsDynamicForm) und füge den Code zur Erstellung der Userform hinzu.
  2. Verwende Instanzen dieser Klasse in deinem Hauptmodul, um die Userform zu steuern.

Praktische Beispiele

Hier ist ein einfaches Beispiel für eine dynamische Userform, die ein Label und einen Button enthält:

Sub CreateDynamicForm()
    Dim frm As UserForm
    Dim lbl As MSForms.Label
    Dim btn As MSForms.CommandButton

    Set frm = UserForms.Add
    Set lbl = frm.Controls.Add("Forms.Label.1", , True)
    Set btn = frm.Controls.Add("Forms.CommandButton.1", , True)

    With lbl
        .Caption = "Willkommen!"
        .Top = 10
        .Left = 10
    End With

    With btn
        .Caption = "Klick mich"
        .Top = 30
        .Left = 10
        .OnAction = "ButtonClick"
    End With

    frm.Show
End Sub

Sub ButtonClick()
    MsgBox "Button wurde geklickt!"
End Sub

Tipps für Profis

  • Verwende With...End With: Dies verbessert die Lesbarkeit und Effizienz deines Codes beim Arbeiten mit Steuerelementen.
  • Auf Ereignisse reagieren: Stelle sicher, dass du die Ereignisse der Controls (z.B. Click-Ereignis) richtig behandelst, um die Userform interaktiv zu gestalten.
  • Debugging: Nutze Debug.Print, um Werte während der Ausführung zu überwachen und Fehler schneller zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich die Userform automatisch schließen? Um die Userform zu schließen, kannst du Unload Me im entsprechenden Sub verwenden, z.B. nach dem Klicken eines Buttons.

2. Kann ich mehrere dynamische Controls hinzufügen? Ja, du kannst mehrere Steuerelemente in einer Schleife hinzufügen, indem du deren Eigenschaften entsprechend anpasst.

3. Gibt es Einschränkungen bei der Verwendung von dynamischen Userforms? Ja, die Anzahl der dynamisch erstellten Controls kann durch die Speicherkapazität deines Systems begrenzt sein. Achte darauf, die Userform nicht mit zu vielen Elementen zu überladen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige