2015-03-05 2 views
0

Я пытаюсь создать процедуру обновления строк VBA для серии из 3 элементов управления combobox в пользовательской форме. Три со спискования все находятся в кадре с именем «frm1» Строковый источник comboboxes представляет собой три отдельных столбца на листе. Рабочий лист имеет названия «параметры» и . Верхняя ячейка в каждом из трех колонок, содержащих строки, имеет то же имя, что и поле со списком, которое ссылается на него. Идея состоит в том, что я могу писать в дополнительных строках в rowource для любого из combobox (просто введя его в правый столбец рабочего листа), а затем запустить подпрограмму и тем самым автоматически расширить выделение строк для соответствующего поля.VBA excel: обновить rowsource для управления combobox путем изменения размера

Однако запуск сценария (вызывая его из UserForm_Activate() рутинного) дает мне «во время выполнения-ошибка„13“: Введите несоответствие»

из вас может помочь мне?

Private Sub UpdateCB() 

    Dim j As Control 
    Dim i As Integer 

     For Each j In frm1.Controls 

      i = 1 

      Do Until ThisWorkbook.Sheets("options").Range(j.Name).Offset(i, 0).Value = "" 

       i = i + 1 

      Loop 

      j.RowSource = ThisWorkbook.Sheets("options").Range(j.Name).Resize(i) 

     Next j 
End Sub 
+0

Попробуйте использовать 'Dim J Как MSForms.Control' - предполагая, что у вас есть ничего, кроме comboboxes на форме. – Rory

+0

На какой строке возникает ошибка? –

+0

Привет, Рори ... THX для вашего предложения, но я ничего не меняю – user2938867

ответ

1

ComboBox.rowsource ожидать range.address не range.value или ссылку на диапазон, который у вас есть сейчас. Так, добавьте .address property в конце проблемной линии таким образом:

j.RowSource = ThisWorkbook.Sheets("options").Range(j.Name).Resize(i).address 
0

если вы используете .tag свойство хранить номер столбца:

Private Sub Userform_initialize() 
    with thisworkbook.sheets("options") 
    combobox1.list=.columns(val(combobox1.tag)).specialcells(2).value 
    combobox2.list=.columns(val(combobox2.tag)).specialcells(2).value 
    combobox3.list=.columns(val(combobox3.tag)).specialcells(2).value 
    end with 
end sub 
Смежные вопросы