vba проблема работы с cutomizable несколькими Listbox с несколькими макросами - PullRequest
0 голосов
/ 28 июня 2019

Итак, вот моя цель: мне нужно выполнить разные макросы, зависящие от множественного выбора ListBox.Я начинающий с VBA, и некоторые задачи в настоящее время становятся для меня немного сложнее.есть множественный выбор ListBox с 9 опциями.Если вы выберете опцию «Exfoliación», он выполнит макрос под названием «macro4».Это полностью настраиваемо, поэтому, если я выберу из ListBox параметр «Exfoliación» и «Estanqueidad», он выполнит макросы 4 и 3 (те, что с ними связаны).

Я видел несколько примеровв Интернете, но они о работе ListBox со столбцами, листами и так далее.Но не было много объяснений работы с макросами.

Пользователь выбирает параметры и нажимает кнопку «Отправить» на рабочем листе, которая называется «Botón».варианты из списка отмечены vector(i)=1.С помощью цикла for варианты считываются и выполняют соответствующие макросы для этих выборов с массивом a(i), который содержит имена этих макросов.

Sub Submit()
'Getting selected items in ListBox1
Dim vector(1 To 11) As Integer
Dim i As Integer
Dim a(1 To 9) As String
'Private Sub CommandButton1_Click()
For i = LBound(a) To UBound(a)
    vector(i) = 0
Next i

With Sheets("Botón").ListBox1

    Select Case (ListBox1.Text)
    Case "Tornillo Resorte": vector(1) = 1
    Case "Categoría Manguito": vector(2) = 1
    Case "Estanqueidad": vector(3) = 1
    Case "Exfoliación": vector(4) = 1
    Case "Material vaina": vector(5) = 1
    Case "Diseño EC": vector(6) = 1
    Case "Curva Q vs Enriquecimiento": vector(7) = 1
    Case "Curva Criticidad": vector(8) = 1
    Case "Curva de carga t. enfriamiento": vector(9) = 1
    Case "Condicioón de transporte": vector(10) = 1
    Case "ATI": vector(11) = 1
    Case ""
        MsgBox "nothing selected"
    Case Else
        MsgBox Me.ListBox1.Text
    End Select

    Dim MN As String
    For i = 1 To N 'Fill the array
        a(i) = "macro" & i
    Next
    MN = "Módulo5" 'Module where i have the worksheet I'm working with
    Dim N As Integer
    N = 11
    For i = LBound(a) To UBound(a)
        If vector(i) = 1 Then
            Application.Run MN & "." & a(i)
        End If
    Next i
    End Sub

Я нахожу проблемы с оператором Select Case (ListBox1.Text).Он не компилируется и не знает, как вызвать listBox с помощью Select Case.

Заранее благодарен за помощь:)

Редактировать : с помощьюновый кодМетод с выбором:

`Private Sub Command Button1_Click() 'This is a button that opens the multilist with the different options. It works correctly
Worksheets("Botón").ListBox1.Clear 
ListBox1.Height=200
ListBox1.Width=250
Dim mylist As Variant 
mylist=Array("Tornillo Resorte",...,"Condicioón de transporte")
ListBox1.List=mylist
End Sub


Sub Submit() ''here's the macro with the button assigned to execute the selection. This is where I get the problem.
With Sheets("Botón").ListBox1
    MN = "Módulo5" 'Module where i have the worksheet I'm working with
    For X = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(X) = True Then
            Application.Run MN & "." & .ListIndex + 1
        Else
            MsgBox "No se ha seleccionado ningún filtro"
        End If
   Next X
End With
End Sub

1 Ответ

0 голосов
/ 28 июня 2019

Если вы хотели выбрать только один макрос - и предполагая, что макросы называются последовательно от macro1 до macrox, то вы можете просто сделать это:

Sub Submit()

With Sheets("Botón").ListBox1

   if .listindex = -1 then

        MsgBox "nothing selected"
   Else
          MN = "Módulo5" 'Module where i have the worksheet I'm working with
          Application.Run MN & "." & .listindex +1
    End If
  End With 
   End Sub

Если вы хотите сделать больше, чем один, вам нужно перебрать массив .selected, вызывая макросы последовательно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...