2015-12-15 3 views
1

У меня есть ListBox, который я поставил в selectmultiExcel VBA Получение множественного выбора из выпадающего списка

Я пытаюсь получить значение выбранных элементов с этим:

Private Sub CommandButton3_Click() 

Dim lItem As Long 
Dim nboc As Integer 
Dim c As Integer 

Range("G:G").Clear 
nboc = Worksheets("BDD").Range("IQ2").Value 
c = 0 
    For lItem = 0 To ListBox2.ListCount - 1 
     If ListBox2.Selected(lItem) = True Then 
      c = c + 1 
      Worksheets("Bordereau Prep").Range("G15:G" & 14 + c) = ListBox2.List(lItem) 
      ListBox2.Selected(lItem) = False 

     End If 
    Next 
End Sub 

Это работает до тех пор, поскольку у меня есть один выбранный элемент. Если у меня есть x элементов, они возвращают x раз первый элемент.

Вы можете мне помочь? (Я довольно новыми для VBA и пытаюсь учиться самостоятельно)

ответ

1

С этой линией:

Worksheets("Bordereau Prep").Range("G15:G" & 14 + c) = ListBox2.List(lItem) 

переопределить значения ранее отпечатанные с помощью этой функции.

На первой итерации вы печатаете значение в каждой ячейке диапазона G15: G15 (в этом случае одна ячейка), на второй итерации вы печатаете значение в каждой ячейке диапазона G15: G16 (поэтому вы переопределяете значение, напечатанное на первой итерации) и так далее.

Вы должны изменить эту строку, как показано ниже:

Worksheets("Bordereau Prep").Range("G14").Offset(c, 0) = ListBox2.List(lItem) 
+0

Это именно то, что я искал –

1

Ваша проблема заключается в строке:

Worksheets("Bordereau Prep").Range("G15:G" & 14 + c) = ListBox2.List(lItem) Он просто присваивает весь диапазон до последнего найденного значения. Вот что-то, что работает для вас, вы можете как-то использовать его и изменить.

Option Explicit 

Sub btn() 

Dim lItem As Long 
Dim c  As Long 

Range("G:G").Clear 

For lItem = 0 To Worksheets("Bordereau Prep").ListBox2.ListCount - 1 
    If Worksheets("Bordereau Prep").ListBox2.Selected(lItem) = True Then 
     c = c + 1 
     Worksheets("BDD").Cells(15 + c, 7) = Worksheets("Bordereau Prep").ListBox2.List(lItem) 
     'Worksheets("Bordereau Prep").Range("G15:G" & 14 + c) = Worksheets("Bordereau Prep").ListBox2.List(lItem) 
     Worksheets("Bordereau Prep").ListBox2.Selected(lItem) = False 
    End If 
Next lItem 

End Sub 

Последнее, но не менее важное: вы стараетесь не использовать Целые числа в VBA, но longs. Наслаждайся этим!

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