Страницы: 1
RSS
Запутался... Помогите обратиться к диапазону на другом листе.
 
Что-то я заглючил. Не могу назначить переменной As Range значения из диапазона другого листа.  
В примере ListBox1 по одной кнопке прекрасно заполняется данными из того же листа (первая кнопка) и отказывается из другого листа (правая кнопка).  
Зполнлять нужно именно через переменную, а не напрямую (т.к. диапазон может меняться и располагаться в разных случаях на разных листах)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Я в подобных случаях сначала в конструкции With Sheets... - End with устанавливаю диапазон (Set Rng = .Range(.Cells(... и т.д.), а уже потом работаю с Rng.
 
The_Prist, Юрий М, спасибо за советы.  
Завтра на работе попробую.  
The_Prist,  
я всегда стараюсь, чтобы программа, выполняемая только на конкретном листе, только  модуле этого листа и "сидела".  
Так проще потом при необходимости переносить листы в другие книги, не боясь потерять при переносе часть кода. Да и если удаляешь ставший почему-то ненужным лист, то "хвостов" не остаётся.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Проверил пример The_Prist post_89864.xls.  
Спасибо. В отдельном модуле, действительно всё работает...  
Но всё-таки очень хотелось бы разместить всю программу в модуле листа.  
Неужели, работая в модуле одного листа, невозможно установить значение переменной    
Dim WhereFind As Range    
равное диапазону на другом листе? (К стати, Public WhereFind As Range тоже не работает)  
 
Чушь какая-то!  
По всей логике, если на Лист1 работают идентичные друг другу конструкции типа:  
Set WhereFind = Sheets("Лист1").Range(...)  
и  
Set WhereFind = Sheets(1).Range(...)  
 
то абсолютно так же на Лист1 обязаны работать и аналогичные конструкции типа:  
Set WhereFind = Sheets("Лист2").Range(...)  
и  
Set WhereFind = Sheets(2).Range(...)  
 
P.S. The_Prist, спасибо за напоминание. Пока не совсем въехал. Ща буду разбираться чтобы отложилось в мозгах...    
Но вопрос топика так пока к сожалению и не закрыт.    
Перефразируя: "Как, работая в модуле одного листа, получить (назначить локальной или глобальной переменной) диапазон из другого листа?"
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
The_Prist,  
вы уже второй раз подряд предлагаете конструкцию типа:  
set rRange = Sheets("Лист1").Range(Sheets("Лист1").Cells(1,1),Sheets("Лист1").Cells(10,1))  
А в первом совете было:  
Sheets(1).Range(Sheets(1).Cells(1,1),Sheets(1).Cells(5,1))  
 
Сначала я подумал, что вы просто описАлись, повторив обращение к листу аж целых три раза...  
Ну, первое указание листа(перед Range) - понятно, а вот второе  и третье (внутри Range)...???  
Тем более, что абсолютно аналогичное предлагаемое вами же выражение с With-End With этих дублирований не даёт...  
Не понимаю. Но сейчас попробую, раз ГУРУ советует.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
да, точку я, действительно, не увидел...  
Выражения одинаковые и оба дают "Ошибка 404. Требуется объект" даже на том же листе.  
Посмотрите пример, пожалуйста.  
Никакие из предлагавшихся вариантов заполнения переменной WhereFind As Range с Листа1 из диапазона листа "ФИО" (ни по имени, ни по индексу, ни с With-End With) мне не удались...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
The_Prist, СПАСИБО ОГРОМНОЕ!  
Всё заработало!  
Как я сам такой ляп проглядел...?  
Позор на мою седую голову и пышную бороду...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
а как можно приравнять значение из текстбокса рассположеного на форме тексткбоксу расположенном на листе?
 
и всё-таки не пойму логики...  
The_Prist,  
вы можете объяснить тупому, почему в выражении:  
set rRange = Sheets("Лист1").Range(Sheets("Лист1").Cells(1,1),Sheets("Лист1").Cells(10,1))  
приходится не один раз в начале, а целых три раза (в начале и по одному разу перед каждым Cells) повторять Sheets("Лист1")?    
Или это что-то типа молитвы: чем больше раз повторишь, тем больше надежды что в конце-концов что-то получится?  
Ну ведь не только ежу, но и Ёкселю наверное должно быть понятно, что, указав в начале выражения Sheets("Лист1").Range(...) мы говорим далее только про ячейки того же листа.    
Тем более, что я слабо себе представляю диапазон, первая ячейка которого находится на доном листе, а последняя - на каком-то другом...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Алексей, а Вас устроит такой ответ: "Так устроен Excel"? :-) Примите это как данность...
 
{quote}{login=Alex_ST}{date=12.01.2010 10:49}{thema=}{post}почему    
приходится не один раз в начале, а целых три раза (в начале и по одному разу перед каждым Cells) повторять Sheets("Лист1")?{/post}{/quote}Потому что Cells без указания листа - относится к активному листу. Три раза упомянули - три раза будьте любезны лист, если он не активный. А еще можно и книгу, если обращаемся к неактивной книге. Длинная конструкция?  
Мне тоже не нравится. В связи с чем люблю метод Resize. Примерно так:  
Set WhereFind = .Cells(nFirstRow, nColumn).Resize(nLastRow-nFirstRow, 0))  
Т.е. указали первую ячейку и как нужно от нее растянуть.
Bite my shiny metal ass!      
 
Лузер™, спасибо за разъяснение. Будем подстраиваться под несовершенство мира.  
И ещё спасибо за информацию про метод Resize. Я о таком вообще в первый раз слышу (наверное потому, что раньше в основном работал на Access, а там ни Intersect Resize кажется нет).  
Ща посмотрю в Хелпе, что это за зверь и как его можно использовать.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Товарищи, помогите правильно обратиться к диапазону ячеек на неактивном листе. Название листа Market Data, 8 столбец, брать данные со второй по 493 ячейку. Значения присваивается для переменной "divs"    
 
Заранее благодарю за помощь!  
Женя
 
Всё написанные выше не помогло?  
Нет у нас такого листа.
 
Так, например  
 
divs=range("'Market Data'!H2:H493").value  
 
=18888=
 
{quote}{login=Казанский}{date=12.10.2011 08:53}{thema=}{post}Так, например  
 
divs=range("'Market Data'!H2:H493").value  
 
=18888={/post}{/quote}  
 
Благодарю, все получилось!)
Страницы: 1
Читают тему
Наверх