powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Построчное выделение ячеек внутри диапазона
9 сообщений из 9, страница 1 из 1
Построчное выделение ячеек внутри диапазона
    #37513528
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, доброго всем времени суток! Такой вопрос: есть диапазон, скажем A1:G10. Возможно ли каким-либо образом (ну, разумеется, с помощью VBA) разрешить пользователю делать в этом диапазоне только построчное (одномерное) выделение ячеек. Т.е., чтобы у него не было возможности выделить прямоугольную (двухмерную) область. Даже если он начал выделять ячейки, скажем слева на право и потом дернул курсор вниз, выделились бы только ячейки той строки, куда был поставлен курсор перед началом выделения.
Заранее спасибо...
P.S. я подозреваю, что это можно сделать как-то с помощью свойства ScrollArea, но вот пока сколько не мурыжился - не получается. Могу только вообще разрешить одну строку выделять... А вот так, чтобы с любой (но только со строкой) в диапазоне - не получается...;)
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37513577
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выделить надо целую "строку" в указанной области? То есть если известен диапазон (скажем, A1:G10) то при попытке "выделения" должна быть отмечена целая "строка" (скажем, A5:G5)? Либо пользователь должен иметь возможность выделить связанную область ячеек в пределах той строки, в которой он начал выделение (скажем, B5:F5)?
Для чего потом потребуется данное выделение? - то есть нужен именно .Select, или предполагается, что выделенная область будет обрабатываться не пользователем, а функционалом вашей программы?
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37513612
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

да, совершенно верно. (второй вариант). Даже если пользователь поставил курсор, скажем в D5, то он должен иметь возможность выделить диапазон как A5:D5 (справа на лево от курсора - D5->A5), так и D5:G5 (или D5:E5, не обязательно до конца строки) слева на право от поставленного курсора.
Это необходимо для работы функционала. В последствии, выделенная область будет подвергаться автозаполнению с помощью кода. И очень важно предусмотреть, чтобы выделенная для этого область ячеек была в одной строке. При этом эта строка должна обязательно входить в диапазон A1:G10. Если для решения задачи потребуется заблокировать для выделения всю остальную часть листа, то это допустимо.
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37513619
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wipeout2097,

да, кстати, могут быть так же выделены и дискретные ячейки (но это не обязательно)... Главное, чтобы они так же были в одной строке.
Если пользователь выделил несколько ячеек в одной строке, а потом вдруг (отпустив мыш), передвинулся в другую и, зажав CTRL попытался выделить ячейки из другой строки, то желательно, чтобы первое выдоеление сбросилось, нессмотря на зажатие CTRL.
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37513686
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делать надо через событие листа Worksheet_SelectionChange(ByVal Target As Range)
Target при этом соответствует Selection.
Изучите внутри процедуры взаимодействие ActiveCell.Address и Target.Address
Hint: первая позиция в Target.Address всегда соответствует началу выделения
Hint: .Address() имеет параметры для представления (RowAbsolute, ColumnAbsolute, ReferenceStyle), что позволяет ускорить анализ позиций
Hint: Функции Split/Join помогут при разбивке Target на элементы


Если же вам нужен работающий пример... Ну лениво мне в воскресенье и просто так изучать взаимодействие в объектной модели...
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37513692
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wipeout2097,

я бы отказался от задействования select в программной обработке данных
но если так хочется то примерно так
Код: plaintext
1.
2.
3.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Split(Target.Address, ":")( 0 ) = "$A$1" Then Range("a1:c1").Select
End Sub
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37515243
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые AndreTM и R Dmitry!
Проанализировал ваши советы, разобрался чуть-чуть с объектом Target и вот что получилось:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next 'Необходимо, если будет вдруг выделена строка или столбец из так называемой "области выделения"
Dim x1 As String
Dim y1 As String
Dim x2 As String
Dim y2 As String

If InStr( 1 , Target.Address, ":") <>  0  Then
  
    x1 = Left(Target.Address, InStr( 2 , Target.Address, "$") -  1 )
    y1 = Left(Right(Target.Address, Len(Target.Address) - InStr( 2 , Target.Address, "$") +  1 ), InStr( 1 , Right(Target.Address, Len(Target.Address) - InStr( 2 , Target.Address, "$") +  1 ), ":") -  1 )

    x2 = Left(Right(Target.Address, Len(Target.Address) - InStr( 1 , Target.Address, ":")), InStr( 2 , Target.Address, "$") -  1 )
    y2 = Right(Right(Target.Address, Len(Target.Address) - InStr( 1 , Target.Address, ":")), Len(Right(Target.Address, Len(Target.Address) - InStr( 1 , Target.Address, ":"))) - InStr( 2 , Right(Target.Address, Len(Target.Address) - InStr( 1 , Target.Address, ":") +  1 ), "$"))

Range(x1 & y1 & ":" & x2 & y1).Select

End If
End Sub

Строки с Left и Right можно было, конечно, "причесать" (скажем с пом. функции Mid), но, когда я это скрябал - я совсем забыл про Mid. Кстати, там вы что-то говорили про Split и Join... Я что-то тоже не разобрался, как это работает. Быть может если у вас будет время, "причешете" мою писанину с их помощью? Буду благодарен.
Ещё, я решил не заморачиваться по поводу ограниченного диапазона действия этой функции (то, что я обозначал в первом посте как A1:G10), и, впринципе Бог с ними - с дискретно выбранными ячейками (с пом. клавиши CTRL). В целом работает неплохо, да и для пользователя вполне достаточно.
За направление мысли огромное спасибо.
P/S/ Я просто программирую больше на базе Access, поэтому объекты Excel знаю крайне слабовато.
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37515343
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wipeout2097,

Нет необходимости обращаться каждый раз к target.address
может стоит задействовать переменную ?
dim t_a$
t_a=target.address


оптимизация :))
Код: plaintext
1.
2.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Cells( 1 ,  1 ).Resize( 1 , Target.Columns.Count).Select
end sub
...
Рейтинг: 0 / 0
Построчное выделение ячеек внутри диапазона
    #37515776
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R Dmitry,

тут нужно было писать не "оптимизация :))" а "оптимизация "
Спасибо! Респект!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Построчное выделение ячеек внутри диапазона
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]