Мультилист, выбирающий первое выбранное значение и сохраняющий - PullRequest
0 голосов
/ 09 ноября 2018

В моей пользовательской форме есть мультилист, в котором пользователь может выбрать до трех элементов. Я хочу захватить первый выбранный элемент и сохранить его в переменной, результаты патологии, которые будут отображаться в следующей форме. Как сохранить первое выбранное значение из списка? Вот что у меня есть, что сравнивает значения

If Me.OptCompare.Value = True Then 'storing value if the chooses to compare
    isFirst = False
        For i = 0 To Me.lstDiagnosis.ListCount - 1
            If isFirst = False Then
                If Me.lstDiagnosis.Selected(i) Then 
                   comp =  Me.lstDiagnosis.List(i, 0): isFirst = True       
                Else
                If Me.lstDiagnosis.Selected(i) Then  
                   comp = comp & " vs. " & Me.lstDiagnosis.List(i, 0) 
                End If
           End If
        Next
        Result = comp
        PathologyResults = "The pathology is the first selected, " & "."
End If

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Использовать Variant Array.

Dim vR(), n As Integer
If Me.OptCompare.Value = True Then 'storing value if the chooses to compare
    For i = 0 To Me.lstDiagnosis.ListCount - 1
        If Me.lstDiagnosis.Selected(i) Then
            n = n + 1
            ReDim Preserve vR(1 To n)
            vR(n) = Me.lstDiagnosis.List(i, 0)
        End If
    Next
    Result = Join(vR, " vs.")
    PathologyResults = vR(1) & "."
End If
0 голосов
/ 10 ноября 2018

Как указано в комментариях, одна из проблем с вашим кодом заключается в том, что ваши самые внутренние If операторы должны быть записаны:

If Me.lstDiagnosis.Selected(i) Then 
   comp =  Me.lstDiagnosis.List(i, 0): isFirst = True
Else
    If Me.lstDiagnosis.Selected(i) Then  
       comp = comp & " vs. " & Me.lstDiagnosis.List(i, 0) 
    End If
End If

Или используя ElseIf:

If Me.lstDiagnosis.Selected(i) Then 
   comp =  Me.lstDiagnosis.List(i, 0): isFirst = True
ElseIf Me.lstDiagnosis.Selected(i) Then  
   comp = comp & " vs. " & Me.lstDiagnosis.List(i, 0) 
End If

Однако я бы лично предложил использовать свойство ItemsSelected, чтобы вам нужно было перебирать только элементы, выбранные пользователем, а не весь набор данных:

Dim var As Variant
Dim rtn As String

If OptCompare Then
    For Each var In lstDiagnosis.ItemsSelected
        rtn = rtn & " vs. " & lstDiagnosis.ItemData(var)
    Next var
    If rtn <> "" Then rtn = Mid(rtn, 6)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...