Уважаемые форумчане !!! У Вас обалденный сайт много дал информации для таких юзеров как я. Все чему я научился благодаря примерам и информации от Вас. Но я понял что мне еще учиться и учиться.
Уважаемый Ігор Гончаренко я говорил про мои познания если бы я знал как использовать этот метод Я вот не пойму почему с одного листа (лист2) работает а со второго (лист1) нет
lechiy, если тупо и в лоб и только для работы с ComboBox(ListBox), не трогая данные листов и обрабатывается первая колонка ComboBox(ListBox) добавьте в код UserForm
Код
Option Explicit
Sub UnqVal(ctrl, a)
Dim i As Long, d As Object
With Me.Controls(ctrl)
.List = a: If .ListCount = 0 Then Exit Sub
Set d = CreateObject("Scripting.Dictionary"): d.CompareMode = 1
Do While i < .ListCount
If d.exists(.List(i, 0)) Then .RemoveItem (i) Else d(.List(i, 0)) = Empty: i = i + 1
Loop
End With
End Sub
Private Sub UserForm_Initialize()
UnqVal "ComboBox1", Array("a", "b", "c", "b", "c", "d", "a")
End Sub
тоже выдает ошибку . Уважаемый AAF в моем случае именно зависимые списки в ComboBoxданная функция мне очень подходит если разберусь с этим или форумчане направят на путь истинный. Ну сам я конечно слабоват тут и спору нет.
Теперь вообще запутался в Watches показывает значение True в строке iLastRow = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row и сдесь же выдает ошибку.
Ошибка в #6 при присвоении Arr возникает из-за свойства Cells - оно тоже относится к текущему листу (Лист1)! Вообще, чтобы не сражаться с каждым подобным свойством (методом), лучше хотя бы временно сделать Лист2 текущим. Если это не подходит, то можно применить конструкцию (внимание, точки в начале):
Код
With Worksheets("Лист2")
iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Arr = .Range(.Cells(2, 2), .Cells(iLastRow, 2)).Value
End With
Огромнейшая благодарность sokol92 за подсказку. По поводу временной активации листа где нужно взять данные проскакивала у меня мысля, но насколько хватает моих познаний оно немножко замедляет работу. Или я не правильно думаю?. Буду испытывать Вашу подсказку я думаю так будет правельней.
С предыдущим все пошло на ура. Но дальше возникает ошибка в ComboBox1 я так понимаю опять не видит листа , или в коде? Private Sub ComboBox1_Change() Dim iRange As Range, iRow As Long 'With Worksheets("Лист2") -------------------- ошибка Set iRange = Columns(1).Find(what:=ComboBox1, LookIn:=xlValues, lookAt:=xlWhole) If Not iRange Is Nothing Then iRow = iRange.Row End If 'With Worksheets("Лист2") ComboBox2.Value = Cells(iRow, 2) ------ ошибка ComboBox3.Value = Sheets("Лист2").Cells(iRow, 3) ------ ошибка 'End With