Страницы: 1
RSS
Ошибка Run-time error '1004' при запуске с другого листа, При запуске макроса с листа Sheet1 все ок, при запуске с Sheet2 ошибка. Помогите найти причину ошибки.
 
Добрый день, уважаемые гуру Excel.
Есть файл с макросом, делал не я. Суть макроса в подстановке значений в ListBox в зависимости от того какие символы введены в TextBox. Данные для подстановки берутся из диапазона на листе Sheet1, если запускать макрос на листе Sheet1 все работает как надо.
Но если добавить еще один лист Sheet2 и попытаться запустить макрос находясь на листе Sheet2  выходит ошибка: Run-time error '1004': Application-defined or object-defined error
Необходимо запускать макрос с листа Sheet2 используя для подстановки значений в ListBox диапазон на листе Sheet1.
Помогите, пожалуйста, разобраться почему появляется ошибка и как ее исправить.
Файл с примером во вложении
 
Правильный ответ
Код
Private Sub UserForm_Initialize()
With Worksheets("Sheet1")
    x = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).Value
    End With
End Sub
Изменено: doober - 27.02.2022 10:40:13
 
Код
Private Sub UserForm_Initialize()
  With Worksheets("Sheet1")
    x = .Range(.[A2], .Cells(Rows.Count, 1).End(xlUp)).Value
  End With
End Sub

и, видимо, тут тоже
Код
Private Sub ListBox1_Click()
  If ListBox1.ListIndex = -1 Then Exit Sub
  Worksheets("Sheet1").Columns(1).Find(ListBox1, lookat:=xlWhole).Select
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Большое спасибо. Все заработало. Вас не затруднит разжевать почему именно так? Я был уверен что можно обратиться к диапазону таким образом:
Код
Private Sub UserForm_Initialize()
    x = Worksheets("Sheet1").Range("A2", Cells(Rows.Count, 1).End(xlUp)).Value
End Sub

Т.е. если не пишем книгу то по умолчанию это та книга в которой запукается макрос, лист указан через Worksheets дальше диапазон.

Почему в одном случае используем With в другом обращаемся к колонке через Worksheets?

 
Цитата
Starik19 написал:
Т.е. если не пишем книгу то по умолчанию это та книга в которой запукается макрос
нет
если не пишем книгу, то по умолчанию, это активная книга (в момент выполнения макроса), если не пишем лист - по умолчанию - это такой же активный лист как и книга
и вообще....
чтобы вы не писали - в итоге получиться не то, о чем вы думаете (мечтаете), а то, что вы написали в макросе
макрос бездушный, ему безразлично о чем вы мечтали, он выполняет то, что вы в нем написали
Изменено: Ігор Гончаренко - 27.02.2022 20:04:59
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Я был уверен что можно обратиться к диапазону таким образом
Как обратиться к диапазону из VBA
там все разжевано последовательно и с примерами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Дмитрий, большое спасибо, буду изучать.
Изменено: Starik19 - 28.02.2022 17:33:36
 
Starik19,
знаете чем еще хорошО программирование?
тем, что тут можно экспериментировать сколько угодно раз, пока не получите нужный результат
(это не хирургия, вы ничем не рискуете, только своим потраченным временем)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх