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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2010, 00:52   #1
sirius84
 
Регистрация: 08.08.2010
Сообщений: 9
По умолчанию определение границ диапазона

здравствуйте, ув. форумчане.

я в vba новичок.

необходимо получить выделенный в Excel диапазон (как Range),
но как-то не получается.

в частности, пробовал
Код:
Set diap = Cells(rin, cin).CurrentRegion
, где rin и cin - индексы выделенных строки и столбца, но диапазон всегда в качестве первой ячейки возвращает A1.

вроде бы решил при помощи ActiveCell.Row и Selection.Row (соотв-нно,
ActiveCell.Column и Selection.Column), но работает, только если выделять диапазон снизу вверх и справа налево. Непривычно, да и некрасиво (это я про решение). Как-то "по-уродски".

Как поправить?

Последний раз редактировалось sirius84; 04.09.2010 в 00:54.
sirius84 вне форума Ответить с цитированием
Старый 04.09.2010, 01:11   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Так подойдет:
MsgBox Selection.Address ?
motorway вне форума Ответить с цитированием
Старый 04.09.2010, 01:14   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вполне себе работает...
Код:
Sub tt()
rin = 3
cin = 2
Set diap = Cells(rin, cin).CurrentRegion
diap.Select
End Sub
если конечно в выбранной ячейке и рядом с ней есть данные.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 04.09.2010, 01:17   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну и в продолжение:
Код:
Sub tt()
rin = 3
cin = 2
Set diap = Cells(rin, cin).CurrentRegion
diap.Select
r = Selection.Row
rr = Selection.Rows.Count
rrr = r + rr - 1
c = Selection.Column
cc = Selection.Columns.Count
ccc = c + cc - 1
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 04.09.2010, 01:35   #5
sirius84
 
Регистрация: 08.08.2010
Сообщений: 9
По умолчанию

спасибо, motorway! все гениальное просто.

Код:
ps = Selection.Address
    ps = Replace(ps, "$", "") ' строка для Range
sirius84 вне форума Ответить с цитированием
Старый 04.09.2010, 01:38   #6
sirius84
 
Регистрация: 08.08.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Вполне себе работает...

если конечно в выбранной ячейке и рядом с ней есть данные.
Hugo121, спасибо за предложенные варианты.
sirius84 вне форума Ответить с цитированием
Старый 04.09.2010, 02:35   #7
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от sirius84 Посмотреть сообщение
спасибо, motorway! все гениальное просто.

Код:
ps = Selection.Address
    ps = Replace(ps, "$", "") ' строка для Range
А так не короче?
Код:
ps = Selection.Address(0,0)
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M
OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN
KL (XL) вне форума Ответить с цитированием
Старый 04.09.2010, 02:42   #8
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от sirius84 Посмотреть сообщение
необходимо получить выделенный в Excel диапазон (как Range)
1) А какой вообще смысл несет вышеприведенная фраза? Выделенный в Excel диапазон (Selection) сам по себе объект типа Range.

2) И как вы в дальнейшем собираетесь использовать выбранный вами код?

Код:
ps = Selection.Address
    ps = Replace(ps, "$", "") ' строка для Range
Только не говорите, что так:

Код:
Range(ps).Select
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M
OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN
KL (XL) вне форума Ответить с цитированием
Старый 06.09.2010, 05:10   #9
sirius84
 
Регистрация: 08.08.2010
Сообщений: 9
По умолчанию

спасибо за первый пример с нулями век живи, век учись

как собираюсь использовать? - копировать выделенный пользователем диапазон в word
sirius84 вне форума Ответить с цитированием
Старый 06.09.2010, 10:53   #10
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от sirius84 Посмотреть сообщение
спасибо за первый пример с нулями век живи, век учись

как собираюсь использовать? - копировать выделенный пользователем диапазон в word
Так а зачем вам адрес Selection текстовой строкой? Так и копируйте:

Код:
Selection.Copy
Вот, кстати, пример такого кода: http://peltiertech.com/Excel/XL_PPT.html#rangewd
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M
OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN
KL (XL) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение границ области в изображении Manul_87 Помощь студентам 0 17.11.2009 17:38
Определение диапазона и его выделение НеВа6464 Microsoft Office Excel 3 23.05.2009 18:27
Определение номера последней строки выделенного диапазона НеВа6464 Microsoft Office Excel 2 17.05.2009 14:36
Прозрачное окно без границ AidarBik Win Api 0 08.02.2008 17:51