2015-12-09 3 views
1

Я работаю в Excel 2010 и это редактор VB. У меня есть форма с 6 comboboxes, и когда я инициализирую форму, то то же самое должно произойти для всех 6 comboboxes. В настоящее время мне приходится писать те же строки кода для различных combobox, как показано ниже.VB Можно ли использовать цикл для управления несколькими формами управления?

Private Sub Form_Initialize() 
    Dim Table As ListObject 
    Set Table = ThisWorkBook.Worksheets("Sheet1").ListObjects("Table1") 
    Dim Rows As Integer 
    Rows = Table.ListRows.Count 
    Dim i As Integer 

    With Me.ComboBox_1 
     .Clear 
     .Value = Empty 
     For i = 1 to Rows 
      .AddItem Table.DataBodyRange(i, 1) 
     Next i 
    End With 

    With Me.ComboBox_2 
     .Clear 
     .Value = Empty 
     for i = 1 to Rows 
      .AddItem Table.DataBodyRange(i, 1) 
     Next i 
    End With 

    'This repeats for another 4 comboboxes (ComboBox_3, ComboBox_4, 
    'ComboBox_5 and ComboBox_6) 

End Sub 

Это становится очень раздражает, чтобы написать тот же код снова и снова, и становится особенно раздражает, когда я хочу, чтобы изменить процедуру для Наримера и должен обновить 5 других также.

Можно ли написать один код, который петли для каждой выпадающей таблицы?

+2

Что-то вроде [это] (http://stackoverflow.com/questions/19624728/looping-through-specific-combo- ящики-массив)? – findwindow

+2

Или [это] (http://stackoverflow.com/questions/3916857/access-vba-how-would-i-have-a-loop-in-vba-that-allows-me-to-loop-through- Contr)? –

ответ

2

Да, это так.

Удостоверьтесь, что каждое поле со списком называется одинаковым, но с соответствующим целым числом в конце каждого. Например, comboboxes следует называть ComboBox1, ComboBox2, ComboBox3, ComboBox4, ComboBox5 и ComboBox6.

Private Sub Form_Initialize() 
    Dim Table As ListObject 
    Set Table = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1") 
    Dim Rows As Integer 
    Rows = Table.ListRows.Count 
    Dim i As Integer 
    Dim j As Integer 

    For j = 1 To 6 
     With Me.Controls("ComboBox" & j) 
      .Clear 
      .Value = Empty 
      For i = 1 To Rows 
       .AddItem Table.DataBodyRange(i, 1) 
      Next i 
     End With 
    Next j 

End Sub 

Это должно работать каждый раз и очень полезно при создании UserForms и т.д ..

+0

Спасибо, к счастью, я уже назвал свои элементы управления модой, о котором вы говорили. Я пробовал что-то подобное, но в основном без Me.Controls, но это явно не сработало. – SilentRevolution

+0

Рад, что это сработало! Всегда рад помочь –

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