Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: UserForm Code per Makro erstellen

UserForm Code per Makro erstellen
30.10.2015 14:25:02
newirobi
Hallo zusammen,
ich schreibe derzeit ein Makro mit dem ich in einem anderen Workbook eine UserForm mit _ ComboBoxen erstelle. Das läuft soweit auch ganz gut.

'Create a UserForm
Set frmUserform = Workbooks(fileName).VBProject.VBComponents.Add(vbext_ct_MSForm)
With frmUserform
.Properties("Left") = 50
.Properties("Top") = 50
.Properties("Height") = 370
.Properties("Width") = 570
.Properties("Caption") = "Enter New Module"
.Name = "frmMyUserForm"
'.Properties ("Show")
End With
With frmMyUserForm
For i = 1 To productRange.Count
Call AddComboBox(i, frmUserform, productRange, fileName, DATABASE)
Next
End With

Sub AddComboBox(myI As Long, frmUF As VBComponent, prodRange As Object, wbName As String,  _
wsName As String)
Dim myFrame As Frame
Dim myComboBox As ComboBox
Dim i As Long
Dim L As Long
Dim T As Long
Dim H As Long
Dim W As Long
Dim ar As Variant
L = 10
W = 120
H = 15
T = (myI - 1) * H + 5
Set myFrame = frmUF.Designer.Controls.Add("Forms.Frame.1", "fraParameter" & CStr(myI), True) _
With myFrame
.Caption = prodRange.Cells(myI).Value
.Left = L
.Top = T * 2
.Height = H * 2
.Width = W + 10
.BorderColor = RGB(255, 255, 255)
.TabIndex = myI - 1
Set myComboBox = myFrame.Controls.Add("Forms.ComboBox.1", "cboParameter" & CStr(myI),  _
True)
With myComboBox
.Clear
.Left = 5
.Top = 6
.Height = H
.Width = W
.TabIndex = 0
.Visible = True
End With
End With
End Sub

Nun will ich einen Schritt weiter gehen und auch den UserForm-Code per Makro erstellen. Hier hab ich jedoch noch keinen wirklichen Ansatz gefunden. Ich habe zwar schon ein Modul erstellt zum Aufrufen des UserForms...

'create a VBA project in the opened file
Set VBComp = Workbooks(fileName).VBProject.VBComponents.Add(vbext_ct_StdModule)
VBComp.Name = MAKRO_NAME
Application.Visible = True
'fill with code
With VBComp.CodeModule
.InsertLines 1, "Sub " & MAKRO_NAME & "()"
.InsertLines 2, "     frmMyUserForm.show"
.InsertLines 3, "End Sub"
End With
Set VBComp = Nothing

...aber weiß jetzt nicht wie ich den "UserForm_Activate()" per Makro erstellt bekomme.
Kann mir einer sagen wie bzw. ob das möglich ist?
Danke!

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm Code per Makro erstellen
30.10.2015 14:54:29
Daniel
Hi
du findest hier ein tutorial zum Thema "Code per Code erstellen"
http://www.office-loesung.de/viewforum13_0_150.php
wobei ich das bei "Basiskenntnissen VBA" für gewagt halte.
Einfacher wäre es wahrscheinlich, du hast eine Vorlagendatei, in welcher die Userform schon vollständig vorhanden ist und kopierst dir dann die Inhalte der anderen Datei in diese Vorlage.
andere Möglichkeit:
du exportierst die vollständige Userform
(im VBA-Editor im Projektplorer über das Kontextmenü) und importierst dann in die neue Datei über den gleichen Weg die Userform.
das lässt sich sicherlich auch programmieren.
Gruß Daniel

Anzeige
AW: UserForm Code per Makro erstellen
30.10.2015 15:00:04
newirobi
Danke für die Hilfe.
Das Problem mit einer Vorlage ist nur, dass ich die UserForm dynamisch aufbauen will/muss. Das heißt ich bekomme eine Exceldatei mit x Parametern. Je nachdem wie viele Parameter in der Datei ausgewertet werden sollen, muss ich ComboBoxen mit zughörigen Elementen füllen.
Ich hoffe mein Problem ist so etwas klarer?!

Anzeige
AW: UserForm Code per Makro erstellen
30.10.2015 15:43:09
newirobi
Ich habe noch etwas weiter rumprobiert und es schließlich selbst lösen können.
Der Vollständigkeit halber, falls jemand auch an dieser Stelle hängt, hier die Lösung:
Ich hatte mir ja bereits mit der Funktion

Set myFrame = frmUF.Designer.Controls.Add("Forms.Frame.1", "fraParameter" & CStr(myI), True)

eine UserForm per Code erstellt.
Sobald diese da ist kann man einfach mit folgenden Befehl den entsprechenden Code dahinter hängen:

With frmUF.CodeModule
lineCount = .CountOfLines
.InsertLines lineCount + 1, "   "
.InsertLines lineCount + 2, "Parameter" & CStr(myI)
.InsertLines lineCount + 3, "   "
End With
Vielleicht hab ich meine Frage etwas komisch ausgedrückt aber letztendlich habe ich genau das gesucht!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

UserForm Code per Makro erstellen


Schritt-für-Schritt-Anleitung

Um eine UserForm in Excel per Makro zu erstellen, folge diesen Schritten:

  1. UserForm hinzufügen: Du kannst eine neue UserForm wie folgt in deinem VBA-Projekt hinzufügen:

    Set frmUserform = Workbooks(fileName).VBProject.VBComponents.Add(vbext_ct_MSForm)
    With frmUserform
       .Properties("Left") = 50
       .Properties("Top") = 50
       .Properties("Height") = 370
       .Properties("Width") = 570
       .Properties("Caption") = "Enter New Module"
       .Name = "frmMyUserForm"
    End With
  2. ComboBoxen hinzufügen: Um ComboBoxen dynamisch hinzuzufügen, erstelle eine Schleife, die die ComboBoxen basierend auf der Anzahl der Parameter in deinem Datenbereich hinzufügt:

    For i = 1 To productRange.Count
       Call AddComboBox(i, frmUserform, productRange, fileName, DATABASE)
    Next
  3. Code für die UserForm erstellen: Verwende die folgende Struktur, um den Code für die UserForm hinzuzufügen:

    With frmUF.CodeModule
       lineCount = .CountOfLines
       .InsertLines lineCount + 1, "   "
       .InsertLines lineCount + 2, "Parameter" & CStr(myI)
       .InsertLines lineCount + 3, "   "
    End With

Häufige Fehler und Lösungen

  • Fehler: UserForm wird nicht angezeigt
    Lösung: Stelle sicher, dass du das UserForm mit frmMyUserForm.Show aufrufst.

  • Fehler: ComboBoxen werden nicht gefüllt
    Lösung: Überprüfe die Datenquelle, die du für die ComboBoxen verwendest. Achte darauf, dass die Range korrekt angegeben ist.


Alternative Methoden

  • Vorlagen verwenden: Eine einfache Methode ist, eine Excel UserForm Vorlage zu erstellen, die bereits die benötigten Steuerelemente enthält. Du kannst diese Vorlage dann kopieren und anpassen.

  • Exportieren und Importieren: Du kannst eine bestehende UserForm exportieren und in ein neues Projekt importieren. Dies ist besonders nützlich, wenn du die UserForm in mehreren Projekten benötigst.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du eine dynamische UserForm mit ComboBoxen erstellen kannst:

Sub CreateDynamicUserForm()
    Dim frmUserform As Object
    Set frmUserform = Workbooks("DeineDatei.xlsm").VBProject.VBComponents.Add(vbext_ct_MSForm)

    ' UserForm Eigenschaften setzen
    With frmUserform
        .Properties("Caption") = "Dynamische UserForm"
        .Name = "frmDynamisch"
    End With

    ' ComboBox hinzufügen
    Call AddComboBox(1, frmUserform, Range("A1:A10"), "DeineDatei.xlsm", "Datenblatt1")
End Sub

Tipps für Profis

  • Nutze die VBA-Dokumentation: Die Microsoft VBA-Dokumentation ist eine wertvolle Ressource, um spezifische Informationen über UserForms und deren Steuerelemente zu finden.

  • Code modularisieren: Halte deinen Code modular, indem du Funktionen für wiederholbare Aufgaben erstellst. Dies erleichtert das Debuggen und die Wartung.


FAQ: Häufige Fragen

1. Wie kann ich eine UserForm in Excel VBA erstellen?
Du kannst eine UserForm mit dem VBA-Editor erstellen und dann per Makro dynamisch anpassen.

2. Kann ich ComboBoxen in einer UserForm automatisch befüllen?
Ja, du kannst ComboBoxen in der UserForm automatisch mit Werten aus einem Datenbereich füllen.

3. Was sind die Vorteile der Verwendung von Vorlagen für UserForms?
Vorlagen ermöglichen es dir, wiederkehrende Strukturen schnell zu erstellen und Zeit bei der Entwicklung zu sparen.

4. Wie kann ich den VBA UserForm Code optimieren?
Nutze Funktionen, um wiederholte Logik zu kapseln, und achte darauf, den Code sauber und gut dokumentiert zu halten.

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