2015-11-25 2 views
0

Я нашел эту ссылку здесь: VBA Code to Create Sheets based on the values in column AУкажите поля имени в ComboBox на основе столбца без повторения?

Это говорит мне, как создать список листов из столбца, на основе имен в одной из колонн на первом листе без повторения.

Я попытался перевести этот код в режим использования для ComboBox, но мои навыки VBA, безусловно, тусклые.

То, что я до сих пор

Private Sub form_load() 

Dim lastRow As Integer 
Dim cellName As Integer 
Dim match As Boolean 

lastRow = Sheets(1).Range("F2").End(xlDown).Row 

For i = 2 To lastRow 
    match = False 
    cellName = .Sheets(1).Range("F" & i).Value 

    For _________________ 

ComboBox1.AddItem i 


End Sub 

Вы заметите, что в этом примере я связан, они используют код

For Each ws In ActiveWorkbook.Worksheets 
     If ws.Name = sheetName Then 
      match = True 
     End If 
    Next 

, чтобы определить, если ячейка уже использовалась в качестве имя листа. Тем не менее, я не достаточно знаком с VBA, чтобы узнать, существует ли дополнительная команда для проверки значений в combobox.

+0

Нет, вам придется петлю снова, чтобы проверить и установить логическое значение, чтобы знать, если у вас уже есть или нет! Или вы можете использовать dictionnary: http://www.snb-vba.eu/VBA_Dictionary_en.html – R3uK

+0

Вы хотите поместить ящики в UserForm или просто на листе? –

+0

@ScottHoltzman Моя конечная цель состоит в том, чтобы этот комбинированный блок мог выбрать опцию, а затем применить определенный фильтр к ~ 15 сводным таблицам одновременно. Это лучший способ, который я могу придумать. Если есть лучший способ, я более чем открыт для предложений! – phroureo

ответ

1

Попробуйте это:

Private Sub UserForm_Initialize() 

Dim lastRow As Integer 
Dim cellName As Integer 
Dim match As Boolean 
Dim iItem As Integer, sItem As String 

lastRow = Sheets(1).Range("F2").End(xlDown).Row 

For i = 2 To lastRow 

    match = False 
    sItem = Sheets(1).Range("F" & i).Value2 

    For iItem = 0 To ComboBox1.ListCount - 1 

     If ComboBox1.List(iItem) = sItem Then 

      match = True 
      Exit For 

     End If 

    Next iItem 

    If Not match Then ComboBox1.AddItem sItem 

Next i 

End Sub 
+1

Отлично! Я бросил его на кнопку, и он работал как шарм. Ты мужчина, Скотт! – phroureo

+1

наихудший вариант O (n^2). Коллекция работает красиво: 'On Error Resume Next: для каждого элемента в диапазоне: collection.Add item.value: Next: для каждого элемента в коллекции: ComboBox1.Add ....' etc –

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