Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 21:42   #1
samoa
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 14
По умолчанию запуталась с адресацией диапазонов на листе

Оказалось, что я совсем не разбираюсь в адресации диапазонов. Случайно при отладке обнаружила, что вот такая строка:

#
With ThisWorkbook.Worksheets(1)
With .Range(.Cells(1, 9), .Cells(Rows.Count, 9).End(xlUp))
...
#
обращается не к диапазону I1:I244 (у меня получается на листе 244), а к диапазону Y1:Y244, где у меня совершенно нет никаких данных.

Но что интерсно, дальше строка

#
...
Set rRo = .Find(xmas(2), LookIn:=xlValues, LookAt:=xlWhole)
End With
End With
#
совершенно правильно находит нужное мне значение в ячейке I188,
т.е. в колонке I.

Может, мне помогут понять, почему так происходит

и .Find получается ищет везде по листу, а не в оговоренном изначально диапазоне...
Или, может, подскажите ссылочку, где хорошо этот вопрос (адресации ячеек) освещен. Ну, как для тупых.
samoa вне форума Ответить с цитированием
Старый 09.11.2010, 22:03   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Код:
обращается не к диапазону I1:I244 (у меня получается на листе 244), а к диапазону Y1:Y244, где у меня совершенно нет никаких данных.
А как вы это определили?
motorway вне форума Ответить с цитированием
Старый 09.11.2010, 22:06   #3
samoa
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 14
По умолчанию

вставила следующей строкой за Range... команду Debug.print

Debug.Print .Range(.Cells(1, 9), .Cells(Rows.Count, 9).End(xlUp)).Address

и он мне такое сказал.
samoa вне форума Ответить с цитированием
Старый 09.11.2010, 22:16   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Это как в задаче о сапогах.
А угадайте.что выдаст сообщение,какой диапазон

Код:
With ThisWorkbook.Worksheets(1)
With .Range(.Cells(1, 8), .Cells(Rows.Count, 8).End(xlUp))

MsgBox .Address

End With
End With
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 09.11.2010, 22:25   #5
samoa
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 14
По умолчанию

Выдало $H$1.
И это как раз понятно. H - 8-я колонка, как в Cells-ах.

Вопрос в другом: почему в моем примере так не получилось? Отчего это зависело? Что надо было предусмотреть или какую команду дать предварительно, чтобы получить то, что нужно.
Хорошо, что в моем макросе это никак не повлияло на результат, но где-то в другом месте может и повлиять. А я и не буду знать почему - строка-то отрабатывается.

К слову, в этом файле до этого я в листах еще не работала. В загрузке стоит вызов формы, там выбираются значения и форматируется лист. До активации листа на том моменте, о котором я задала вопрос еще не дошло.
samoa вне форума Ответить с цитированием
Старый 09.11.2010, 22:27   #6
samoa
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 14
По умолчанию

А как вы делаете, чтобы фрагмент кода в сообщении выделялся, а не вставлялся с решеточками, как у меня?
samoa вне форума Ответить с цитированием
Старый 09.11.2010, 22:31   #7
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Попробуйте так:
Код:
Debug.Print .Range(.Cells(1, 9), .Cells(Rows.Count, 9).End(xlUp).Address).Address
motorway вне форума Ответить с цитированием
Старый 09.11.2010, 22:42   #8
samoa
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 14
По умолчанию

если сделать:
Debug.Print .Range(.Cells(1, 9), .Cells(Rows.Count, 9).End(xlUp).Address).Address -

Получается тот же самый результат
$Y$1:$Y$244

Это я получается задала диапазон от ячейки 1,9 до ячейки с адресом ".Cells(Rows.Count, 9).End(xlUp).Address" . Интересно.

И тем не менее, почему $Y?

Ну, хоть намекните от чего это может зависеть?
Практически такой же пример Doober-а, где он хотел меня подколоть, адресовывает все так, как и следовало ожидать.

Последний раз редактировалось samoa; 09.11.2010 в 22:45.
samoa вне форума Ответить с цитированием
Старый 09.11.2010, 22:44   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Такого не должно быть. Видимо, где-то ошибка. Можете приложить файл в принципе
motorway вне форума Ответить с цитированием
Старый 09.11.2010, 22:49   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Это как в задаче о сапогах.
Надо правильно считать сапоги

Код:
With ThisWorkbook.Worksheets(1)

MsgBox .Range(.Cells(1, 8), .Cells(Rows.Count, 8).End(xlUp)).Address
With .Range(.Cells(1, 8), .Cells(Rows.Count, 8).End(xlUp))
MsgBox .Address
MsgBox .Range(.Cells(1, 8), .Cells(Rows.Count, 8).End(xlUp)).Address
End With
End With
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с многоуровневой адресацией grook Общие вопросы C/C++ 3 18.12.2010 17:15
Снова торможу с адресацией... tae1980 Microsoft Office Excel 18 28.03.2010 21:05
Помогите с адресацией листа в формуле ABCOz Microsoft Office Excel 2 09.09.2009 13:38
Помогите новичку с адресацией разобраться Zeneth Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 16.06.2009 19:55
ячейка на одном листе, в которую необходимо подставлять данные из столбца, находящегося на другом листе Ирина Водолагина Microsoft Office Excel 4 04.03.2009 23:38