Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Ошибка при заполнении списка при смене текущего листа
 
Уважаемые форумчане !!!
У Вас обалденный сайт много дал информации для таких юзеров как я. Все чему я научился благодаря примерам и информации от Вас. Но я понял что мне еще учиться и учиться.

Данная тема как бы не из новых правда нашел только вот это
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=9831
возникла необходимость приспособить код из поста Юрий М. post_184998. Сначала все было хорошо, но вот возникла необходимость запускать юзерформ из другого листа этой книги, тут и возникли проблемы. Почему то возникают ошибки.

Как Вы понимаете познания мои не очень. И поэтому обращаюсь к Вам за помощью.
Подскажите пожалуйста в чем моя ошибка
 
на вопрос звучащий в заголовке вашей темы ответ такой:
используйте метод RemoveDuplicates соответствующего обьекта Range
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Уважаемый Ігор Гончаренко я говорил про мои познания если бы я знал как использовать этот метод
Я вот не пойму почему с одного листа (лист2) работает а со второго (лист1) нет
 
Прочитайте у Дмитрия Щербакова про отладку.

Источник ошибки в Вашем случае - следующие две строки кода в функции NoDups2 модуля Module1:
Код
iLastRow = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
Arr = Range(Cells(2, 2), Cells(iLastRow, 2)).Value
В случае, когда текущий лист отличен от "Лист2", они (строки) обращаются к разным листам.

Для модераторов название темы: Ошибка при заполнении списка при смене текущего листа"
Изменено: sokol92 - 11 Июл 2018 13:22:32
Владимир
 
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 - 11 Июл 2018 15:11:47
 
Огромная благодарность за подсказку sokol92 в моем случае это необходимость.
Я пытался во второй строке указывать лист
Код
iLastRow = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
 Arr = Sheets("Лист2").Range(Cells(2, 2), Cells(iLastRow, 2)).Value
тоже выдает ошибку .
Уважаемый 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
Страницы: 1
Читают тему (гостей: 1)
Наверх