Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > работа с диапазоном ячеек


Автор: FOLGA 7.8.2007, 20:42
Доброго времени суток! У меня вопрос следующего характера: можно ли на листе работать с диапазоном ячеек, т.е., например, при двойном щелчке на одну группу ячеек происходило одно событие, а при щелчке на другую группу - другое? можно ли блокировать группу ячеек, чтобы при двойном щелчке на них ничего не происходило? Пожалуйста, помогите, если не трудно, буду очень признательна!

Автор: Akina 8.8.2007, 00:01
У книги нет события Click. Как и у отдельно взятого листа.
Есть только BeforeDoubleClick и BeforeRightClick.

Автор: RockClimber 8.8.2007, 01:51
Двойной щелчок - это обязательно? Если нет, то можно обрабатывать событие change. При этом надо проверять свойства Target.Row и Target.Column, в них будут содержаться номера строки и столбца ячейки, по которой кликнули.

Автор: FOLGA 8.8.2007, 08:06
RockClimber, а когда именно проверять эти свойства? можно примерчик, pleace...

Автор: FOLGA 8.8.2007, 08:30
Ой спасибо, разобралась! Ура, ура, ура!

Автор: mihanik 8.8.2007, 09:27
Цитата(FOLGA @  8.8.2007,  08:30 Найти цитируемый пост)
Ой спасибо, разобралась! Ура, ура, ура! 


А пример решения?
Всем было бы интересно...

Автор: FOLGA 9.8.2007, 08:08
Вот, пожалуйста, не знаю, насколько грамотно, но работает...
Код

If (Target.Row = 64 Or Target.Row = 65 Or Target.Row = 66 Or Target.Row = 67 Or Target.Row = 68 Or Target.Row = 69 Or Target.Row = 70 Or Target.Row = 71 Or Target.Row = 72) And Target.Column = 2 Then
Worksheets(1).Cells(ActiveCell.Row, ActiveCell.Column + 1).Value = "нет"
Worksheets(1).Cells(ActiveCell.Row, ActiveCell.Column + 2).Value = "нет"
Worksheets(1).Cells(ActiveCell.Row, ActiveCell.Column + 3).Value = "нет"
Worksheets(2).Activate
End If
'при щелчке переходит на 2 лист и заполняет следующие 3 ячейки
If (Target.Row = 64 Or Target.Row = 65 Or Target.Row = 66 Or Target.Row = 67 Or Target.Row = 68 Or Target.Row = 69 Or Target.Row = 70 Or Target.Row = 71 Or Target.Row = 72) And (Target.Column = 3) Then
If ActiveCell.Value = "нет" Then ActiveCell.Value = "да" Else ActiveCell.Value = "нет"
End If
If (Target.Row = 64 Or Target.Row = 65 Or Target.Row = 66 Or Target.Row = 67 Or Target.Row = 68 Or Target.Row = 69 Or Target.Row = 70 Or Target.Row = 71 Or Target.Row = 72) And (Target.Column = 4) Then
If ActiveCell.Value = "нет" Then ActiveCell.Value = "да" Else ActiveCell.Value = "нет"
End If
If (Target.Row = 64 Or Target.Row = 65 Or Target.Row = 66 Or Target.Row = 67 Or Target.Row = 68 Or Target.Row = 69 Or Target.Row = 70 Or Target.Row = 71 Or Target.Row = 72) And (Target.Column = 5) Then
If ActiveCell.Value = "нет" Then ActiveCell.Value = "да" Else ActiveCell.Value = "нет"
End If
' а здесь меняет слова да/нет при двойном щелчке

Автор: pavel55 11.8.2007, 22:03
По-моему, вместо длинной строки

Код
If (Target.Row = 64 Or Target.Row = 65 Or Target.Row = 66 Or Target.Row = 67 Or Target.Row = 68 Or Target.Row = 69 Or Target.Row = 70 Or Target.Row = 71 Or Target.Row = 72) And Target.Column = 2 Then


Которая является, по-моему, диапазоном B64:B72

Можно использовать вот это

Код
 If Not Intersect(Target, Range("B64:B72")) Is Nothing Then ....

 
вот пример для двойного щелчка в нужном диапазоне

Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim RngInColumnB  As Range
    Set RngInColumnB = Range("B64:B72") 'присваиваем диапазон объектной переменной
    If Not Intersect(Target, RngInColumnB) Is Nothing Then 'проверяем щёлкнул ли user внутри этого диапазона или нет
        MsgBox "Hi" 'если да, то показать сообщение "привет"
    End If
End Sub


ну и также можно присвоит все ваши диапазоны другим объектным переменным (хотя можно и не присваивать, а просто писать Range("B64:B72") и проверять их через Intersect

Если я правильно понял вашу задачу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)