Установить список выбора как переменную - PullRequest
0 голосов
/ 24 июня 2019

Я хочу создать что-то вроде файла «Patch», который я могу отправить пользователям, и они используют его для исправления своих существующих шаблонов.

Я пытаюсь создать пользовательскую форму со списком, в котором отображаются все открытые в настоящее время файлы Excel, пользователи затем выбирают файл, который хотят исправить, и нажимают кнопку для запуска сценария исправления.

Я очень плохо знаком с пользовательскими формами и vba в целом, и мне трудно пытаться установить 'Listbox1.Selection' в качестве переменной, на которую может ссылаться следующий код исправления. В настоящее время мой код для пользовательской формы / списка приведен ниже (он просто позволяет выбрать элемент:

Private Sub UserForm_Activate()

Dim wb As Workbook

For Each wb In Workbooks
    If Windows(wb.Name).Visible Then _
      ListBox1.AddItem wb.Name
Next

End Sub

Как только пользователи выбирают файл, как мне установить его в качестве переменной?

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Как мне установить эту переменную в качестве переменной?

Private Sub doPatch()
With Me.ListBox1
    Dim currIndex&
    currIndex = .ListIndex             ' assign zerobased index number to variable

    ' how do I go about setting that as a variable?
      Dim currWB
      currWB = .List(currIndex, 0)     ' get chosen list element in column zero based on current index

    ' 'or simply:
    ' currWB = .Value                  ' sufficient in your case as only one column listed

    ' display both variables in immediate window of your VB Editor
      Debug.Print "zerobased Listindex#: " & currIndex & " ~> " & currWB

    ' do patch stuff...

End With
End Sub

В конце концов, вы можете вызвать вышеописанную процедуру либо с помощью командной кнопки и / или двойным щелчком, например, через

Private Sub CommandButton1_Click()
    doPatch
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    doPatch
End Sub
1 голос
/ 24 июня 2019

Добавьте командную кнопку в пользовательскую форму и добавьте следующий код:

Private Sub CommandButton1_Click()

ActiveSheet.Range("A1").Value = ListBox1.Text


End Sub

Это напечатает выбранную опцию на А1. Вы можете сохранить его в переменную в любом другом месте.

В основном ListBox1.Text даст вам выбранный вариант.

...