Макрос Excel, чтобы отобразить все варианты выбора многостраничного списка
Я хотел бы создать файл листа Excel со списком с множественным выбором как:
item1 item2 item3 item4 ... ..
И затем, когда я выбираю для примера item1
и item3
из этого списка, выбранные элементы заполняются в другой ячейке с отображением в виде
item1 - item 2 are selected
Решение, которое я пробовал, это создание списка множественного выбора, и я прикрепил к нему макрос, а затем я попытался отобразить выбранный элемент в ячейке списка, но я не знал, что написать макрос, я не эксперт в Excel I нужно сделать это.
заранее спасибо
Это должно работать. Учитывая, что вы начинаете с Fresh No Items Selected ListBox. Я выбираю добавлять и удалять элементы из уже сделанной строки, а не зацикливать каждый объект на каждый выбор / отбор для повышения производительности. Это вариант, но это должно работать намного более гладко. Но если у вас уже есть элементы, выбранные в вашем ListBox, это не будет учитываться, пока вы не отмените выбор, а затем повторно выберите их.
Другое различие между этой опцией и циклом всех значений каждый раз заключается в том, что с помощью этого метода он добавляет значения / значения в порядке, когда они, в которых они выбраны, выступают в том же порядке, что и в ListBox, это может быть положительным отрицательный или безразличный к вашей цели, но решил, что я должен добавить это.
Private Sub ListBox1_Change() Dim lngCurrentItem As Long Dim strCurrentItem As String Dim strAllSelectedItems As String Dim rngOutput As Range Set rngOutput = [J1] lngCurrentItem = ListBox1.ListIndex strAllSelectedItems = rngOutput strAllSelectedItems = Replace(strAllSelectedItems, " Are Selected", "") strAllSelectedItems = Replace(strAllSelectedItems, " Is Selected", "") strCurrentItem = ListBox1.List(lngCurrentItem) If ListBox1.Selected(lngCurrentItem) Then If strAllSelectedItems = "No Items Selected" Then rngOutput = strCurrentItem & " Is Selected" Else rngOutput = strAllSelectedItems & " - " & strCurrentItem & " Are Selected" End If Else strAllSelectedItems = Replace(strAllSelectedItems, " - " & strCurrentItem, "") strAllSelectedItems = Replace(strAllSelectedItems, strCurrentItem, "") If strAllSelectedItems = "" Then rngOutput = "No Items Selected" ElseIf InStr(1, strAllSelectedItems, " - ", vbTextCompare) > 0 Then rngOutput = strAllSelectedItems & " Are Selected" Else rngOutput = strAllSelectedItems & " Is Selected" End If End If End Sub
ЕСЛИ вы хотели бы каждый цикл перебирать весь список (если вы хотите, чтобы список был достаточно маленьким, вы не заметите большую часть разницы в скорости, просто убедитесь, что ваш список не настроен так, как весь столбец с более чем 1 миллион клеток, и вы должны быть в порядке)
Private Sub ListBox1_Change() Dim lngCurrentItem As Long Dim strCurrentItem As String Dim strAllSelectedItems As String Dim rngOutput As Range Set rngOutput = [J1] strAllSelectedItems = "" For i = 0 To ListBox1.ListCount - 1 strCurrentItem = ListBox1.List(i) If ListBox1.Selected(i) Then If strAllSelectedItems = "" Then strAllSelectedItems = strCurrentItem Else strAllSelectedItems = strAllSelectedItems & " - " & strCurrentItem End If End If Next i If strAllSelectedItems = "" Then rngOutput = "No Items Selected" ElseIf InStr(1, strAllSelectedItems, " - ", vbTextCompare) > 0 Then rngOutput = strAllSelectedItems & " Are Selected" Else rngOutput = strAllSelectedItems & " Is Selected" End If End Sub