|
|
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
Народ, доброго всем времени суток! Такой вопрос: есть диапазон, скажем A1:G10. Возможно ли каким-либо образом (ну, разумеется, с помощью VBA) разрешить пользователю делать в этом диапазоне только построчное (одномерное) выделение ячеек. Т.е., чтобы у него не было возможности выделить прямоугольную (двухмерную) область. Даже если он начал выделять ячейки, скажем слева на право и потом дернул курсор вниз, выделились бы только ячейки той строки, куда был поставлен курсор перед началом выделения. Заранее спасибо... P.S. я подозреваю, что это можно сделать как-то с помощью свойства ScrollArea, но вот пока сколько не мурыжился - не получается. Могу только вообще разрешить одну строку выделять... А вот так, чтобы с любой (но только со строкой) в диапазоне - не получается...;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2011, 18:53 |
|
||
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
Выделить надо целую "строку" в указанной области? То есть если известен диапазон (скажем, A1:G10) то при попытке "выделения" должна быть отмечена целая "строка" (скажем, A5:G5)? Либо пользователь должен иметь возможность выделить связанную область ячеек в пределах той строки, в которой он начал выделение (скажем, B5:F5)? Для чего потом потребуется данное выделение? - то есть нужен именно .Select, или предполагается, что выделенная область будет обрабатываться не пользователем, а функционалом вашей программы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2011, 20:13 |
|
||
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
AndreTM, да, совершенно верно. (второй вариант). Даже если пользователь поставил курсор, скажем в D5, то он должен иметь возможность выделить диапазон как A5:D5 (справа на лево от курсора - D5->A5), так и D5:G5 (или D5:E5, не обязательно до конца строки) слева на право от поставленного курсора. Это необходимо для работы функционала. В последствии, выделенная область будет подвергаться автозаполнению с помощью кода. И очень важно предусмотреть, чтобы выделенная для этого область ячеек была в одной строке. При этом эта строка должна обязательно входить в диапазон A1:G10. Если для решения задачи потребуется заблокировать для выделения всю остальную часть листа, то это допустимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2011, 21:02 |
|
||
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
Wipeout2097, да, кстати, могут быть так же выделены и дискретные ячейки (но это не обязательно)... Главное, чтобы они так же были в одной строке. Если пользователь выделил несколько ячеек в одной строке, а потом вдруг (отпустив мыш), передвинулся в другую и, зажав CTRL попытался выделить ячейки из другой строки, то желательно, чтобы первое выдоеление сбросилось, нессмотря на зажатие CTRL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2011, 21:08 |
|
||
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
Делать надо через событие листа Worksheet_SelectionChange(ByVal Target As Range) Target при этом соответствует Selection. Изучите внутри процедуры взаимодействие ActiveCell.Address и Target.Address Hint: первая позиция в Target.Address всегда соответствует началу выделения Hint: .Address() имеет параметры для представления (RowAbsolute, ColumnAbsolute, ReferenceStyle), что позволяет ускорить анализ позиций Hint: Функции Split/Join помогут при разбивке Target на элементы Если же вам нужен работающий пример... Ну лениво мне в воскресенье и просто так изучать взаимодействие в объектной модели... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2011, 22:36 |
|
||
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
Wipeout2097, я бы отказался от задействования select в программной обработке данных но если так хочется то примерно так Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2011, 22:45 |
|
||
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
Уважаемые AndreTM и R Dmitry! Проанализировал ваши советы, разобрался чуть-чуть с объектом Target и вот что получилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Строки с Left и Right можно было, конечно, "причесать" (скажем с пом. функции Mid), но, когда я это скрябал - я совсем забыл про Mid. Кстати, там вы что-то говорили про Split и Join... Я что-то тоже не разобрался, как это работает. Быть может если у вас будет время, "причешете" мою писанину с их помощью? Буду благодарен. Ещё, я решил не заморачиваться по поводу ограниченного диапазона действия этой функции (то, что я обозначал в первом посте как A1:G10), и, впринципе Бог с ними - с дискретно выбранными ячейками (с пом. клавиши CTRL). В целом работает неплохо, да и для пользователя вполне достаточно. За направление мысли огромное спасибо. P/S/ Я просто программирую больше на базе Access, поэтому объекты Excel знаю крайне слабовато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2011, 22:51 |
|
||
|
Построчное выделение ячеек внутри диапазона
|
|||
|---|---|---|---|
|
#18+
Wipeout2097, Нет необходимости обращаться каждый раз к target.address может стоит задействовать переменную ? dim t_a$ t_a=target.address оптимизация :)) Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 00:39 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37513619&tid=2176305]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
136ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 496ms |

| 0 / 0 |
