Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с типом Range, Работа с типом Range 
:(
    Опции темы
ИгнатьевАлексей
Дата 18.11.2005, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: 2
Всего: 3



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



--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Naghual
  Дата 18.11.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 7
Всего: 49



Код

    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]


Это сообщение отредактировал(а) Naghual - 18.11.2005, 11:26


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
ИгнатьевАлексей
Дата 18.11.2005, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: 2
Всего: 3



Спасибо!
Я не указывал "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?


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
bankuss
Дата 18.11.2005, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 26.3.2004

Репутация: нет
Всего: 4



Dim RR, FirstCell, LastCell As Range

на сколько я знаю VB при таком порядке написания, тип Range присваивает только последней переменной, а остальные -тип Variant.
Правильно будет:
Dim RR As Range, FirstCell As Range, LastCell As Range
PM MAIL   Вверх
Naghual
Дата 18.11.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 7
Всего: 49



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

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


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
ИгнатьевАлексей
Дата 18.11.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: 2
Всего: 3



Спасибо!
Если межно, еще один вопрос:

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


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Naghual
Дата 18.11.2005, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 7
Всего: 49



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


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
likhobory
Дата 18.11.2005, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



Цитата
Хотелось бы иметь информацию о ходе выполнения

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


--------------------
PM MAIL   Вверх
malor
  Дата 28.12.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Нужна информация по работе с диапазонами.
Читаю книгу  “VBA 2003 Самоучитель”, Кузьменко В.Г., 2004г., стр.395. Автор в листинге, приведенном на данной странице использует свойста Row и Rows.Count у объекта типа Range, перед этим на предыдущих страницах не объяснив их суть, что они хранят. Дайте pls ссылку где в инете есть подробное описание рэйнджевских свойств/методов.
PM MAIL   Вверх
FINANSIST
Дата 28.12.2008, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 13
Всего: 23



Цитата(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, да и таймер работы туда же

Это сообщение отредактировал(а) FINANSIST - 28.12.2008, 18:55


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
Naghual
Дата 28.12.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 7
Всего: 49



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



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
malor
  Дата 28.12.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Цитата(Naghual @  28.12.2008,  19:05 Найти цитируемый пост)
нарушил правила форума.
Какой пункт Правил форума?

PM MAIL   Вверх
Akina
Дата 28.12.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



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

Пункты 10 и 12.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 6.1.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



malor,  smile 

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

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


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.