Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ActiveCell.Interior.ColorIndex = 44 ActiveCell.Interior.ColorIndex = 30 ActiveCell.Interior.ColorIndex = 19 ActiveCell.Interior.ColorIndex = 36 Cancel = True End Sub
[/vba]
Нужно, чтобы кликая дважды на ячейку, ее цвет становился такой-то, потом кликая по ней дважды, он становился такой-то, потом кликая по ней же дважды такой-то, и еще раз кликая дважды - такой-то. Надеюсь, идея понятна. У меня все время последний появляется 36 цвет. Почему - не знаю. Помогите разобраться.
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ActiveCell.Interior.ColorIndex = 44 ActiveCell.Interior.ColorIndex = 30 ActiveCell.Interior.ColorIndex = 19 ActiveCell.Interior.ColorIndex = 36 Cancel = True End Sub
[/vba]
Нужно, чтобы кликая дважды на ячейку, ее цвет становился такой-то, потом кликая по ней дважды, он становился такой-то, потом кликая по ней же дважды такой-то, и еще раз кликая дважды - такой-то. Надеюсь, идея понятна. У меня все время последний появляется 36 цвет. Почему - не знаю. Помогите разобраться.ant6729
Сообщение отредактировал Serge_007 - Воскресенье, 04.05.2014, 18:05
Sub StartDoubleClick() Application.OnDoubleClick = "MyDoubleClickMacro" End Sub
Sub StopDoubleClick() Application.OnDoubleClick = "" End Sub
Sub MyDoubleClickMacro() If Selection.Address = "$C$7" Then Select Case ActiveCell.Value Case "Red" ActiveCell.Value = "Green" Case "Green" ActiveCell.Value = "Blue" Case Else ActiveCell.Value = "Red" End Select End If End Sub
[/vba]
Ну, я искал тут, как человек объяснял Excel про повторения. Не понял. Case else после каждой строчки ставить что-ли...
[vba]
Код
Sub StartDoubleClick() Application.OnDoubleClick = "MyDoubleClickMacro" End Sub
Sub StopDoubleClick() Application.OnDoubleClick = "" End Sub
Sub MyDoubleClickMacro() If Selection.Address = "$C$7" Then Select Case ActiveCell.Value Case "Red" ActiveCell.Value = "Green" Case "Green" ActiveCell.Value = "Blue" Case Else ActiveCell.Value = "Red" End Select End If End Sub
[/vba]
Ну, я искал тут, как человек объяснял Excel про повторения. Не понял. Case else после каждой строчки ставить что-ли...ant6729
Сообщение отредактировал Serge_007 - Воскресенье, 04.05.2014, 18:05
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ActiveCell.Interior.ColorIndex = Choose("44", "30", "19", "36") Cancel = True End Sub
[/vba]
Может, пример какие-то есть, я сам хотел бы догнать, как делать выбор
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ActiveCell.Interior.ColorIndex = Choose("44", "30", "19", "36") Cancel = True End Sub
[/vba]
Может, пример какие-то есть, я сам хотел бы догнать, как делать выборant6729
Сообщение отредактировал Serge_007 - Воскресенье, 04.05.2014, 18:04
Сделал 8 цветов ТОЛЬКО ДЛЯ ТОГО, чтобы показать принцип, дальше устал [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target.Interior Select Case .ColorIndex Case xlNone: .ColorIndex = 1 Case 1: .ColorIndex = 2 Case 2: .ColorIndex = 3 Case 3: .ColorIndex = 4 Case 4: .ColorIndex = 5 Case 5: .ColorIndex = 6 Case 6: .ColorIndex = 7 Case 7: .ColorIndex = 8 Case 8: .ColorIndex = 9 Case Else: .ColorIndex = xlNone End Select End With End Sub
[/vba] или так:[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target.Interior Select Case .Color Case vbWhite: .Color = vbBlack Case vbBlack: .Color = vbRed Case vbRed: .Color = vbGreen Case vbGreen: .Color = vbYellow Case vbYellow: .Color = vbBlue Case vbBlue: .Color = vbMagenta Case vbMagenta: .Color = vbCyan Case vbCyan: .Color = vbWhite Case Else: .Color = vbWhite End Select End With End Sub
[/vba]но вообще-то это и в самом деле маразм так цвета определять... По-хорошему надо либо цвета в нужном порядке в Public-словарь загнать и оттуда считывать, либо (если устраивает встроенный порядок следования) просто в цикле .Colorindex = .Colorindex +1 устанавливать цвета.
Сделал 8 цветов ТОЛЬКО ДЛЯ ТОГО, чтобы показать принцип, дальше устал [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target.Interior Select Case .ColorIndex Case xlNone: .ColorIndex = 1 Case 1: .ColorIndex = 2 Case 2: .ColorIndex = 3 Case 3: .ColorIndex = 4 Case 4: .ColorIndex = 5 Case 5: .ColorIndex = 6 Case 6: .ColorIndex = 7 Case 7: .ColorIndex = 8 Case 8: .ColorIndex = 9 Case Else: .ColorIndex = xlNone End Select End With End Sub
[/vba] или так:[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target.Interior Select Case .Color Case vbWhite: .Color = vbBlack Case vbBlack: .Color = vbRed Case vbRed: .Color = vbGreen Case vbGreen: .Color = vbYellow Case vbYellow: .Color = vbBlue Case vbBlue: .Color = vbMagenta Case vbMagenta: .Color = vbCyan Case vbCyan: .Color = vbWhite Case Else: .Color = vbWhite End Select End With End Sub
[/vba]но вообще-то это и в самом деле маразм так цвета определять... По-хорошему надо либо цвета в нужном порядке в Public-словарь загнать и оттуда считывать, либо (если устраивает встроенный порядок следования) просто в цикле .Colorindex = .Colorindex +1 устанавливать цвета.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Понедельник, 05.05.2014, 09:18
Спасибо, с цветами понятно) А какой принцип, если бы слова нужно было менять? [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target.ActiveCell Select Case .ActiveCell Case 1: .ActiveCell = "Кот" Case 2: .ActiveCell = "Сметана" Case 3: .ActiveCell = "Рыба" Case Else: .ActiveCell.Value = xlNone End Select End With End Sub
[/vba]
Спасибо, с цветами понятно) А какой принцип, если бы слова нужно было менять? [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target.ActiveCell Select Case .ActiveCell Case 1: .ActiveCell = "Кот" Case 2: .ActiveCell = "Сметана" Case 3: .ActiveCell = "Рыба" Case Else: .ActiveCell.Value = xlNone End Select End With End Sub
ant6729, 1. В обработчике события Worksheet_BeforeDoubleClick Target.ActiveCell - это "масло масляное", т.к. при даблклике ячейка не активной быть не может. 2. Вы с использованием декларации With — End With всё-таки познакомились бы с чего это вдруг после объявления With Target.ActiveCell у Вас появляется .ActiveCell ? Свойством умолчанию у ActiveCell является Value 3. С чего это вдруг у Вас в Case Else: ActiveCell пытается присвоиться Value = xlNone - это же константа Excel'я - цифра -4142, соответствующая отсутствию заливки ячейки. 4. Вообще-то коты, рыба и сметана никакого отношения к теме "Заливка ячеек по двойному клику не имеют", т.к. это не цвета. так что здесь это оффтоп. А для учёбы есть другие разделы форума.
Чтобы закончить урок по раскрашиванию котов всё-таки отвечу на оффтопный вопрос: [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case .Value Case "Рыба": .Value = "Кот" Case "Кот": .Value = "Сметана" Case "Сметана": .Value = "Рыба" Case Else: .Value = "Кот" End Select End With End Sub
[/vba]
ant6729, 1. В обработчике события Worksheet_BeforeDoubleClick Target.ActiveCell - это "масло масляное", т.к. при даблклике ячейка не активной быть не может. 2. Вы с использованием декларации With — End With всё-таки познакомились бы с чего это вдруг после объявления With Target.ActiveCell у Вас появляется .ActiveCell ? Свойством умолчанию у ActiveCell является Value 3. С чего это вдруг у Вас в Case Else: ActiveCell пытается присвоиться Value = xlNone - это же константа Excel'я - цифра -4142, соответствующая отсутствию заливки ячейки. 4. Вообще-то коты, рыба и сметана никакого отношения к теме "Заливка ячеек по двойному клику не имеют", т.к. это не цвета. так что здесь это оффтоп. А для учёбы есть другие разделы форума.
Чтобы закончить урок по раскрашиванию котов всё-таки отвечу на оффтопный вопрос: [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case .Value Case "Рыба": .Value = "Кот" Case "Кот": .Value = "Сметана" Case "Сметана": .Value = "Рыба" Case Else: .Value = "Кот" End Select End With End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) colors = Array(vbWhite, vbBlack, vbRed, vbGreen, vbYellow, vbBlue, vbMagenta, vbCyan, vbWhite) Cancel = True With Target.Interior For i = 0 To UBound(colors) If .Color = colors(i) Then .Color = colors(i + 1) Exit For ElseIf i = UBound(colors) Then .Color = colors(0) End If Next End With End Sub
[/vba]
и так
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Words = Array("Рыба", "Кот", "Сметана", "Рыба") Cancel = True With Target For i = 0 To UBound(Words) If .Value = Words(i) Then .Value = Words(i + 1) Exit For ElseIf i = UBound(Words) Then .Value = Words(1) End If Next End With End Sub
[/vba]
а можно так?
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) colors = Array(vbWhite, vbBlack, vbRed, vbGreen, vbYellow, vbBlue, vbMagenta, vbCyan, vbWhite) Cancel = True With Target.Interior For i = 0 To UBound(colors) If .Color = colors(i) Then .Color = colors(i + 1) Exit For ElseIf i = UBound(colors) Then .Color = colors(0) End If Next End With End Sub
[/vba]
и так
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Words = Array("Рыба", "Кот", "Сметана", "Рыба") Cancel = True With Target For i = 0 To UBound(Words) If .Value = Words(i) Then .Value = Words(i + 1) Exit For ElseIf i = UBound(Words) Then .Value = Words(1) End If Next End With End Sub
Alex_ST, о том самом Просто я исходя из уровня владения VBA топик-стартера решил все-таки написать пример реализации предложенного вами алгоритма, к тому же при использовании цикла в решении этой задачи есть пара нюансов, которые могут ввести в ступор новичка в программировании. В данном случае это невозможность использования обычного Else и необходимость выхода из цикла при срабатывании условия. Ну вот как-то так .
ant6729, я бы вам посоветовал для начала изучить синтаксис основных конструкций vba, типы данных и объектную модель excel (с общими сведениями объектной модели можно ознакомится по ссылке), на форуме есть раздел, где можно скачать справочники по excel и vba.
Alex_ST, о том самом Просто я исходя из уровня владения VBA топик-стартера решил все-таки написать пример реализации предложенного вами алгоритма, к тому же при использовании цикла в решении этой задачи есть пара нюансов, которые могут ввести в ступор новичка в программировании. В данном случае это невозможность использования обычного Else и необходимость выхода из цикла при срабатывании условия. Ну вот как-то так .
ant6729, я бы вам посоветовал для начала изучить синтаксис основных конструкций vba, типы данных и объектную модель excel (с общими сведениями объектной модели можно ознакомится по ссылке), на форуме есть раздел, где можно скачать справочники по excel и vba.krosav4ig
Ну, чему я в первую очередь всегда пытаюсь научить новичков, так это использовать Option Explicit в случае если они в самом деле новички, а не "зубры" и хотят быть более-менее уверены в точности результатов работы макросов.
Ну, чему я в первую очередь всегда пытаюсь научить новичков, так это использовать Option Explicit в случае если они в самом деле новички, а не "зубры" и хотят быть более-менее уверены в точности результатов работы макросов.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Вторник, 06.05.2014, 16:10