Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Работа с типом Range


Автор: ИгнатьевАлексей 18.11.2005, 08:47
Друзья!
Простенький вопросик от новичка в Excel-евских макросах.
Допустим, в переменную типа Range вводится выделенный пользователем диапазон ячеек с одним столбцом (например B5:B25 ). Далее мне надо получить отдельно адрес первой и последней ячейки этого диапазона (т.е. "B5" и "B25" соответственно).
Заранее благодарен!

Автор: Naghual 18.11.2005, 11:16
Код

    Dim RR As Range
    Dim FirstCell As Range
    Dim LastCell As Range
    
    Set RR = Application.Selection
    
    Set FirstCell = Cells(RR.Row, RR.Column)
    Set LastCell = Cells(RR.Row + RR.Rows.Count - 1, RR.Column + RR.Columns.Column - 1)

Добавлено @ 11:23

The following example displays four different representations of the same cell address on Sheet1. The comments in the example are the addresses that will be displayed in the message boxes.

Код

MsgBox FirstCell .Address()                             ' $B$5
MsgBox FirstCell .Address(RowAbsolute:=False)           ' $B5
MsgBox FirstCell .Address(ReferenceStyle:=xlR1C1)       ' R5C2
MsgBox FirstCell .Address(ReferenceStyle:=xlR1C1, _
    RowAbsolute:=False,     _
    ColumnAbsolute:=False,  _
    RelativeTo:=Worksheets(1).Cells(3, 3))              ' R[2]C[-1]

Автор: ИгнатьевАлексей 18.11.2005, 12:45
Спасибо!
Я не указывал "Set"
Хочется спросить, почему в случае
Set FirstCell = Cells(RR.Row, RR.Column)
"Set" необходимо, а команда
FirstCellAddr = FirstCell.Address
выполняется без "Set" , ведь в обоих случаях идет присваивание переменной определенного типа значений соответствующего типа, или не совсем так?

И еще маленький вопросик:

весь мир пишет типа
Dim RR As Range
Dim FirstCell As Range
Dim LastCell As Range,

а я пишу для краткости:
Dim RR, FirstCell, LastCell As Range

Может я делаю ошибку, или это плохой стиль напасания кода на VBA?

Автор: bankuss 18.11.2005, 12:57
Dim RR, FirstCell, LastCell As Range

на сколько я знаю VB при таком порядке написания, тип Range присваивает только последней переменной, а остальные -тип Variant.
Правильно будет:
Dim RR As Range, FirstCell As Range, LastCell As Range

Автор: Naghual 18.11.2005, 13:06
Set используется при операциях присваивания Объектов. Не строк, не цисел, а именно Объектов.
А Address возвращает текст. ;)

Ну а про написание Dim тебе bankuss уже ответил.

Автор: ИгнатьевАлексей 18.11.2005, 15:55
Спасибо!
Если межно, еще один вопрос:

Мой макрос обрабатывает объемные таблицы и может работать до часа. Хотелось бы иметь информацию о ходе выполнения, т.е. сколько выполнено, а сколько осталось. Создал форму с надписью в процентах, да вот беда, при выполнении программы форма отображается лишь на мгновение, а потом исчезает под окнами самих книг, да и сами окна книг выглядят так, как будто комп завис. Посоветуйте, пожалуйста, что-нибудь!

Автор: Naghual 18.11.2005, 16:05
1. Сделать книги невидимымы.
2. Перенести код самого макроса в тело Формы. Макрос запускается формой.
3. Показывать форму модально.

Автор: likhobory 18.11.2005, 16:35
Цитата
Хотелось бы иметь информацию о ходе выполнения

еще вариант - выводи инфу в statusbar или в caption приложения

Автор: malor 28.12.2008, 13:28
Нужна информация по работе с диапазонами.
Читаю книгу  “VBA 2003 Самоучитель”, Кузьменко В.Г., 2004г., стр.395. Автор в листинге, приведенном на данной странице использует свойста Row и Rows.Count у объекта типа Range, перед этим на предыдущих страницах не объяснив их суть, что они хранят. Дайте pls ссылку где в инете есть подробное описание рэйнджевских свойств/методов.

Автор: FINANSIST 28.12.2008, 18:46
Цитата(malor @  28.12.2008,  13:28 Найти цитируемый пост)
свойста Row и Rows.Count у объекта типа Range, перед этим на предыдущих страницах не объяснив их суть, что они хранят. Дайте pls ссылку где в инете есть подробное описание рэйнджевских свойств/методов.

F1+F2: вот тебе и ссылки (+ MDSN в помощь)
Цитата(ИгнатьевАлексей @  18.11.2005,  15:55 Найти цитируемый пост)
Мой макрос обрабатывает объемные таблицы и может работать до часа. 
 smile 
Объёмные таблицы это сколько?
100 записей;1000 или 10 000 - отлаженный макрос переваривает ну точно не за час ! (конечно зависит от к-ва столбцов и "экзотичности" необходимых действий)
Здаётся мне - код не оптимизирован, а ход выполнения макроса действительно удобнее всего кинуть в status bar, да и таймер работы туда же

Автор: Naghual 28.12.2008, 19:05
Некрофил malor поднял мертвую тему и, к тому-же, нарушил правила форума.
Модеры - закройте пожалуйста.

Автор: malor 28.12.2008, 20:28
Цитата(Naghual @  28.12.2008,  19:05 Найти цитируемый пост)
нарушил правила форума.
Какой пункт http://forum.vingrad.ru/act-boardrules.html

Автор: Akina 28.12.2008, 21:03
Цитата(malor @  28.12.2008,  21:28 Найти цитируемый пост)
Какой пункт Правил форума?

Пункты 10 и 12.

Автор: mihanik 6.1.2009, 18:33
malor,  smile 

Модератор: Пожалуйста, один топик - один вопрос.

ЗЫ.
 smile 
Что-то я на праздниках задержался...
Пора и в Инет выходить...
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)