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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2009, 16:45   #1
Sensygirl
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 12
Вопрос Selection - как объеденить???

Подскажите пожалуйста, как можно сделать так, чтобы макрос добавлял новое выделение строки к уже имеющемуся выделению группы строк???!!!
Другими словами, работал как Ctrl+клик мышью.

Вот просто выделение одной строки, по которой кликнули
Sub macrosStr()
ActiveCell.EntireRow.Select
End Sub

а как сделать, чтобы при новом клике выделялась не другая строка, а стали выделенные обе? и т.д. (три, ..., много).
Sensygirl вне форума Ответить с цитированием
Старый 05.10.2009, 16:58   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
а как сделать, чтобы при новом клике выделялась не другая строка, а стали выделенные обе? и т.д. (три, ..., много).
Очень просто. Нажмите Shift + F8. А потом выделяйте строки.
EducatedFool вне форума Ответить с цитированием
Старый 05.10.2009, 17:00   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вставьте код в модуль листа, двойной щелчек по любой ячейке будет добавлять все новые и новые строки к уже отмеченным, до бесконечности...
Код:
Dim Rg As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
  If Rg Is Nothing Then
    Set Rg = Rows(ActiveCell.Row)
  Else
    Set Rg = Application.Union(Rg, Rows(ActiveCell.Row))
  End If
  Rg.Select
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.10.2009, 17:15   #4
Sensygirl
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 12
По умолчанию

Ой как классно, спасибо огромнейшее! Теперь бы научиться при повторном клике убирать выделение ))) ну, передумал человек, нужно бы сделать переключатель....
Sensygirl вне форума Ответить с цитированием
Старый 05.10.2009, 17:24   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Теперь бы научиться при повторном клике убирать выделение )))
Учитесь
Код:
Dim Rg As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
    If Rg Is Nothing Then
        Set Rg = Target.EntireRow
    Else
        If Intersect(Target, Rg) Is Nothing Then
            Set Rg = Union(Rg, Target.EntireRow)
        Else
            Dim tempRa As Range, ro As Range
            For Each ro In Rg.Rows
                If Intersect(Target, ro) Is Nothing Then
                    If tempRa Is Nothing Then
                        Set tempRa = ro
                    Else
                        Set tempRa = Union(tempRa, ro)
                    End If
                End If
            Next
            Set Rg = tempRa
        End If
    End If
    Rg.Select
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 05.10.2009, 17:32   #6
Sensygirl
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 12
По умолчанию

хм, иногда при кликах вываливаются ошибки.. а иногда срабатывает. Кажется ошибка возникает при попытке выделить несуществующую область, когда снимается последний Select и rg становится пустым. Тогда Rg.Selection не может выполниться. Ну в целом направление я поняла, спасибо большущее!!!
Sensygirl вне форума Ответить с цитированием
Старый 05.10.2009, 17:35   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Кажется ошибка возникает при попытке выделить несуществующую область, когда снимается последний Select и rg становится пустым.
Действительно, не учёл этот момент.

Теперь всё работает без ошибок:
Код:
Dim Rg As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
    Cancel = True: On Error Resume Next
    If Rg Is Nothing Then
        Set Rg = Target.EntireRow
    Else
        If Intersect(Target, Rg) Is Nothing Then
            Set Rg = Union(Rg, Target.EntireRow)
        Else
            Dim tempRa As Range, ro As Range
            For Each ro In Rg.Rows
                If Intersect(Target, ro) Is Nothing Then
                    If tempRa Is Nothing Then
                        Set tempRa = ro
                    Else
                        Set tempRa = Union(tempRa, ro)
                    End If
                End If
            Next
            Set Rg = tempRa
        End If
    End If
    Rg.Select
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 05.10.2009, 17:40   #8
Sensygirl
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 12
По умолчанию

Вот спасибо все работает, да. Даже думать не пришлось ))
Sensygirl вне форума Ответить с цитированием
Старый 05.10.2009, 18:03   #9
Sensygirl
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 12
По умолчанию

Ан-нет, чуть чуть подумать пришлось, самую капельку ))
Сделала это все не по двойному клику, а по одинарному, и только по определенному столбцу
Sensygirl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перейти selection-ом в конец документа? Diego__ Microsoft Office Word 4 26.08.2009 18:16
Добавить слова в Selection viod Microsoft Office Word 3 08.06.2009 11:45
Совокупность записей объеденить в массив. распечатка данных felmor Паскаль, Turbo Pascal, PascalABC.NET 2 30.12.2008 19:58
Selection.AutoFilter ZORRO2005 Microsoft Office Excel 4 04.02.2008 12:11
ВЫДЕЛЕНИЕ(SELECTION)???? ZORRO2005 Microsoft Office Excel 2 12.12.2007 16:52