Dropdown-Liste des Userform-Moduls

Hallo ihr alle

Ich habe ein userForm in Form einer Checkliste mit zu überprüfenden Kontrollkästchen erstellt, ich möchte es obligatorisch machen, eines der Kontrollkästchen jeder Zeile zu aktivieren, bevor ich Zugriff auf ein Kombinationsfeld habe, das die verschiedenen Module des Makros gruppiert (jedes Modul hat einen VBA-Code), dann möchte ich eine CommandButton hinzufügen, die das ausgewählte Modul startet. 

Ich weiß, es muss ein Chaos für die VBA-Götter sein, ich bin kein Programmierer und ich weiß nicht, ob es möglich ist?

PS: Das Makro wird von einer Zeichensoftware (Solidworks) gestartet, deshalb befindet sich die Checkliste im Benutzerformular und nicht in einer Excel-Tabelle.

Vielen Dank im Voraus


test.jpg

Hallo

Hier ist ein Beispiel, das mir scheint, um zu beantworten, was Sie tun möchten...

Guter Code für Sie...

Herzliche Grüße


macrouserform.swp
3 „Gefällt mir“

Hallo Roger,

Vielen Dank für Ihre Hilfe, ich habe mein userForm mit Ihrem Code für die Checkliste geändert, das ist gut, auf der anderen Seite in der Dropdown-Liste hätte ich mir die Liste der 4 Module unten gewünscht (siehe Bild test.jpg) und je nach gewähltem Modul das Modulmakro starten.

Ich hoffe, es ist möglich. 

Vielen Dank im Voraus

Hallo

Versuchen Sie es so:

    For i = 0 To Application.Modules.Count - 1
        MalistBox.AddItem Application.Modules(i).Name         
    Next i

 

1 „Gefällt mir“

Hallo

Danke, ich schaue morgen

Hallo

Ich habe den Code getestet, indem ich Rogers Makro geändert habe, ich kann es nicht tun

In der Dropdown-Liste werden die Module nicht angezeigt

 

Hallo

Da sich die Namen Ihrer 4 Module nie ändern, sollten Sie in der Lage sein, sie auszufüllen, sobald Sie das Makro starten und etwas wie dieses eingeben:

Private Sub UserForm_Activate()
   MonCombobox.AddItem ("Mon module 1")
   MonCombobox.AddItem ("Mon module 2")
   MonCombobox.AddItem ("Mon module 3")
   MonCombobox.AddItem ("Mon module 4")
End Sub

Natürlich ersetzen Sie "MyCombobox" durch den Namen Ihres Steuerelements und das "Mein Modul ... " durch den Namen Ihrer Module.

Herzliche Grüße

2 „Gefällt mir“

Hallo

Und wenn Sie Ihre Module wirklich nach Code auflisten möchten, müssen Sie in der Lage sein, etwas zu tun wie:

Private Sub UserForm_Activate()
    Dim vbProj As VBProject
    Dim vbComp As VBComponent
    Dim i As Integer
    Dim maMacro As String
    maMacro = "MacroUserForm" 'à remplacer par le nom de la macro
    For Each vbProj In Application.VBE.VBProjects
        i = 1
        If vbProj.Name = maMacro Then
            For Each vbComp In vbProj.VBComponents
                If vbProj.VBComponents.Item(i).Type = 1 Then
                    ComboBox1.AddItem vbProj.VBComponents.Item(i).Name
                End If
                i = i + 1
            Next
        End If
    Next
End Sub

Seien Sie vorsichtig, vergessen Sie nicht, "Microsoft Visual Basic for Applications Extensibility" in Tools/Referenzen einzufügen.

Herzliche Grüße

3 „Gefällt mir“

Danke Roger,

Ich werde es im Laufe des Tages testen

Nach ein paar Änderungen funktioniert das Benutzerformular , es zeigt mir alle Module in der Dropdown-Liste.

Kleines Problem siehe angehängte Datei:

1- Von Anfang an ist meine Dropdown-Liste mit der Auswahl der Module zugänglich, es wäre besser, wenn sie ausgegraut ist, solange die Kästchen nicht aktiviert sind

 2- Die Schaltfläche startet das aus der Dropdown-Liste ausgewählte Modul nicht 

Es macht Fortschritte, es ist gut 

Vielen Dank


macrouserform_2.swp

Hallo

Sie können zum Beispiel wie im angehängten Makro vorgehen, aber das ist nur ein Beispiel, es liegt an Ihnen, sich an Ihre Bedürfnisse anzupassen.

Herzliche Grüße


macrouserform_3.swp
1 „Gefällt mir“

Hallo Roger,

Es funktioniert ooooooh, du bist zu stark 

 Ich habe mich geirrt:( Das Objekt "Fehler 438" behandelt diese Eigenschaft oder Methode nicht)

Um es durchzubringen, habe ich die . Zeilenwert:         Wenn TypeName(Ctrl) = "CheckBox" und Ctrl.Object.Value = "true", dann no. = no. + 1

Ich bin so glücklich

Danke, danke, vielen Dank, dass Sie sich Zeit für mich genommen haben.