Lista rozwijana modułu Userform

Cze wszystkim

Utworzyłem formularz użytkownika w postaci listy kontrolnej z CheckBoxami do zaznaczenia, chciałbym wprowadzić obowiązek zaznaczenia jednego z pól każdego wiersza przed uzyskaniem dostępu do listy rozwijanej grupującej różne moduły makra (każdy moduł ma kod vba), a następnie chcę dodać CommandButton, który uruchomi wybrany moduł. 

Wiem, że to musi być bałagan dla bogów VBA, nie jestem programistą i nie wiem czy to możliwe?

PS: Makro jest uruchamiane przez oprogramowanie do rysowania (Solidworks), dlatego lista kontrolna znajduje się w formularzu użytkownika, a nie w arkuszu Excela.

Z góry dziękuję


test.jpg

Witam

Oto przykład, który wydaje mi się odpowiadać na to, co chcesz zrobić...

Dobry kod dla ciebie...

Pozdrowienia


macrouserform.swp
3 polubienia

Witaj Rogerze,

Dziękuję za pomoc, zmieniłem mój userForm z Twoim kodem na listę kontrolną, która jest dobra, z drugiej strony na liście rozwijanej wolałbym listę 4 poniższych modułów (patrz obrazek test.jpg) i w zależności od wybranego modułu uruchom makro modułu.

Mam nadzieję, że to możliwe. 

Z góry dziękuję

Witam

Spróbuj w ten sposób:

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

 

1 polubienie

Witam

Dziękuję, zajrzę jutro

Witam

Przetestowałem kod, zmieniając makro Rogera, nie mogę tego zrobić

Na liście rozwijanej nie są wyświetlane moduły 

 

Witam

Ponieważ nazwy twoich 4 modułów nigdy się nie zmieniają, powinieneś być w stanie je wypełnić, gdy tylko uruchomisz makro i wstawisz coś takiego:

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

Oczywiście zastępujesz "MyCombobox" nazwą swojego formantu i "Mój moduł... " przy nazwie modułów.

Pozdrowienia

2 polubienia

Witam

A jeśli naprawdę chcesz wyświetlić listę swoich modułów według kodu, musisz być w stanie zrobić coś takiego:

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

Bądź ostrożny, nie zapomnij umieścić "Microsoft Visual Basic for Applications Extensibility" w Narzędzia/Referencje.

Pozdrowienia

3 polubienia

Dziękuję Roger,

Przetestuję to w ciągu dnia

Po kilku modyfikacjach formularz użytkownika działa, pokazuje mi wszystkie moduły z listy rozwijanej.

Mały problem patrz załączony plik:

1- Od samego początku moja lista rozwijana jest dostępna z wyborem modułów, lepiej byłoby , gdyby była wyszarzona, o ile pola nie są zaznaczone

 2- Przycisk  nie uruchamia modułu wybranego z listy rozwijanej

Robi postępy, jest dobrze 

Dziękuję bardzo


macrouserform_2.swp

Witam

Możesz na przykład zrobić tak jak w załączonym makrze, ale to tylko przykład, od Ciebie zależy, czy dostosujesz się do swoich potrzeb.

Pozdrowienia


macrouserform_3.swp
1 polubienie

Witaj Rogerze,

To działa oooooooh, jesteś zbyt silny 

 Miałem błąd :( Błąd 438" nie obsługuje tej właściwości lub metody)

Aby to przeszło, usunąłem plik . Wartość wiersza:         Jeśli TypeName(Ctrl) = "CheckBox" i Ctrl.Object.Value = "True", to No. = No. + 1

Jestem taki szczęśliwy

Dziękuję, dziękuję, bardzo dziękuję za poświęcenie mi czasu.