2014-01-11 3 views
1

У меня есть форма в макросе Excel. Эта форма будет захватывать значения, вставленные в текстовые поля, список и хранить в Sheet2.Как отображать значения из списка мультиселекторов

В форме апплета есть 2 кнопки с именем «Следующий» и «Предыдущий». Эта кнопка будет использоваться для навигации между сохраненными записями. Я могу перемещаться между записями, а значения отображаются в текстовых окнах. Однако я не уверен, как я могу отображать значения из списков. Мой список - это многосегментный список.

Я предоставил фрагмент своего кода о том, как записи сохраняются на листе2 и как происходит навигация при нажатии кнопки «Далее».

 Private Sub Save_Click() 

     Dim ctl As Control 
     Dim S As String 
     Dim i As Integer 


     RowCount = Worksheets("Sheet2").Range("A1").CurrentRegion.Rows.Count 
    With Worksheets("Sheet2").Range("A1") 
    .Offset(RowCount, 0).Value = Me.Name1.Value ' capture value from list box 

    'below code is for capturing value from multiselect listbox 
    With AOI 
     For i = 0 To .ListCount - 1 
     If .Selected(i) = True Then S = S & ", " & .List(i) 
    Next i 
     Range("A1").Offset(RowCount, 10).Value = S 
    End With 
    End Sub 

Ниже код для навигации между сохраненными записями ..

Private Sub Next1_Click() 

     strCurrentSetofRows = Worksheets("Sheet2").Range("A1").CurrentRegion.Rows.Count 
     i = i + 1: j = 0 

     If i > (strCurrentSetofRows - 1) Then 
     MsgBox "No More Records" 
     Exit Sub 
     End If 

     Set sRange = Worksheets("Sheet2").Range("A1") 

     Name1.Text = sRange.Offset(i, j).Value: j = j + 1 
    End Sub 

Любые мысли о том, как я могу отображать сохранены значения АОИ (мое поле).

ответ

1

Поскольку вы сохраняете значения с использованием , в качестве разделителя, вы можете использовать их для разделения значений и загрузки их на ListBox. BTW, я надеюсь, что вы генерируете ListBox с полным списком в UserForm'sИнициализация мероприятие?

Вот очень простой пример. Пожалуйста, внесите изменения в соответствии с вашими потребностями.

Предположим, у клетки A1 есть Blah1,Blah2,Blah6. Тогда попробуйте этот код

Option Explicit 

Dim i As Long, j As Long 

Private Sub UserForm_Initialize() 
    ListBox1.MultiSelect = fmMultiSelectMulti 

    For i = 1 To 10 
     ListBox1.AddItem "Blah" & i 
    Next 
End Sub 

Private Sub CommandButton1_Click() 
    Dim ArValues As Variant 
    Dim sValue As String 
    Dim multivalues As Boolean 

    If InStr(1, Range("A1").Value, ",") Then 
     ArValues = Split(Range("A1").Value, ",") 
     multivalues = True 
    Else 
     sValue = Range("A1").Value 
     multivalues = False 
    End If 

    If multivalues = True Then 
     For i = 0 To UBound(ArValues) 
      For j = 0 To ListBox1.ListCount - 1 
       If ListBox1.List(j) = ArValues(i) Then 
        ListBox1.Selected(j) = True 
        Exit For 
       End If 
      Next j 
     Next i 
    Else 
     For j = 0 To ListBox1.ListCount - 1 
      If ListBox1.List(j) = sValue Then 
       ListBox1.Selected(j) = True 
       Exit For 
      End If 
     Next j 
    End If 
End Sub 

Скриншот

enter image description here

+0

Хотя этот код считывает значения, однако, кажется, заселение неправильного поля. Значения заполняются в combobox, который находится над списком. Во-вторых, значения моего списка находятся в 11-м столбце в листе2. Я не создаю ListBox с полным списком в событии Initialize UserForm. Значения в Listbox настроены как диспетчер имен, а в свойстве rowource rowbox я задал диспетчер имен. Мне все еще нужно инициализировать его? как это помогает? – user3175856

+0

Может ли кто-нибудь помочь? – user3175856

+0

Умм странный Я, должно быть, пропустил ваш комментарий. Ваш список не генерируется в событии Initialize Userform? –

Смежные вопросы