Доброго времени суток. Вроде и избитая тема. Нужен список к Combobox без повторов, берущийся с листа. Вставил в свою форму такой код: [vba]
Код
arr = Range(Sheets("Журнал ИБ").Cells(5, 11), Sheets("Журнал ИБ").Cells(Rows.Count, "K").End(xlUp)).Value With CreateObject("Scripting.Dictionary") For i = LBound(arr) To UBound(arr) .Item(arr(i, 1)) = 1 Next Me.fio1.List = .Keys End With
[/vba] При первом запуске формы все работает отлично, но после записи данных и перезагрузки формы ругается на не совместимый тип данных. В чем дело понять не могу.
Доброго времени суток. Вроде и избитая тема. Нужен список к Combobox без повторов, берущийся с листа. Вставил в свою форму такой код: [vba]
Код
arr = Range(Sheets("Журнал ИБ").Cells(5, 11), Sheets("Журнал ИБ").Cells(Rows.Count, "K").End(xlUp)).Value With CreateObject("Scripting.Dictionary") For i = LBound(arr) To UBound(arr) .Item(arr(i, 1)) = 1 Next Me.fio1.List = .Keys End With
[/vba] При первом запуске формы все работает отлично, но после записи данных и перезагрузки формы ругается на не совместимый тип данных. В чем дело понять не могу.Паштет
'списки фамилий Set Dic = CreateObject("Scripting.Dictionary") Populate fio1, ['Журнал ИБ'!K5], Dic Populate fiosklad1, ['Журнал ИБ'!L5], Dic Populate fiosklad2, ['Журнал ИБ'!R5], Dic Populate fio2, ['Журнал ИБ'!S5], Dic Populate ceh1, ['Журнал ИБ'!Q5], Dic Populate ceh2, ['Журнал ЗС'!H5], Dic Populate fio3, ['Журнал ИБ'!I5], Dic Populate fio4, ['Журнал ЗС'!J5], Dic Populate fio5, ['Журнал ЗС'!N5], Dic Populate fiosklad5, ['Журнал ЗС'!O5], Dic Set Dic = Nothing End Sub Private Sub Populate(ByRef ctrl As Control, ByRef Cell As Range, ByRef Dic As Object) Dim arr As Variant With Cell.Parent arr = .Range(Cell, .Cells(.Rows.Count, Cell.Column).End(xlUp)) End With If IsArray(arr) Then With Dic .RemoveAll For i = LBound(arr) To UBound(arr) .Item(arr(i, 1)) = 1 Next ctrl.List = .Keys End With Else ctrl.List = Array(arr) End If End Sub
'списки фамилий Set Dic = CreateObject("Scripting.Dictionary") Populate fio1, ['Журнал ИБ'!K5], Dic Populate fiosklad1, ['Журнал ИБ'!L5], Dic Populate fiosklad2, ['Журнал ИБ'!R5], Dic Populate fio2, ['Журнал ИБ'!S5], Dic Populate ceh1, ['Журнал ИБ'!Q5], Dic Populate ceh2, ['Журнал ЗС'!H5], Dic Populate fio3, ['Журнал ИБ'!I5], Dic Populate fio4, ['Журнал ЗС'!J5], Dic Populate fio5, ['Журнал ЗС'!N5], Dic Populate fiosklad5, ['Журнал ЗС'!O5], Dic Set Dic = Nothing End Sub Private Sub Populate(ByRef ctrl As Control, ByRef Cell As Range, ByRef Dic As Object) Dim arr As Variant With Cell.Parent arr = .Range(Cell, .Cells(.Rows.Count, Cell.Column).End(xlUp)) End With If IsArray(arr) Then With Dic .RemoveAll For i = LBound(arr) To UBound(arr) .Item(arr(i, 1)) = 1 Next ctrl.List = .Keys End With Else ctrl.List = Array(arr) End If End Sub