UserForm Code per Makro erstellen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm Frame
Bild

Betrifft: UserForm Code per Makro erstellen
von: newirobi
Geschrieben am: 30.10.2015 14:25:02

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!

Bild

Betrifft: AW: UserForm Code per Makro erstellen
von: Daniel
Geschrieben am: 30.10.2015 14:54:29
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

Bild

Betrifft: AW: UserForm Code per Makro erstellen
von: newirobi
Geschrieben am: 30.10.2015 15:00:04
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?!

Bild

Betrifft: AW: UserForm Code per Makro erstellen
von: newirobi
Geschrieben am: 30.10.2015 15:43:09
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!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "UserForm Code per Makro erstellen"