Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Заливка ячеек по двойному клику - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заливка ячеек по двойному клику (Макросы/Sub)
Заливка ячеек по двойному клику
ant6729 Дата: Воскресенье, 04.05.2014, 16:56 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
[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 цвет.
Почему - не знаю. Помогите разобраться.


Сообщение отредактировал Serge_007 - Воскресенье, 04.05.2014, 18:05
 
Ответить
Сообщение[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
Дата добавления - 04.05.2014 в 16:56
RAN Дата: Воскресенье, 04.05.2014, 17:13 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Потому, что последним стоит 36 цвет, а удосужиться объяснить Excel, сколько раз вы по ячейке потоптались, вы не соизволили.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПотому, что последним стоит 36 цвет, а удосужиться объяснить Excel, сколько раз вы по ячейке потоптались, вы не соизволили.

Автор - RAN
Дата добавления - 04.05.2014 в 17:13
ant6729 Дата: Воскресенье, 04.05.2014, 17:30 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
[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 после каждой строчки ставить что-ли...


Сообщение отредактировал Serge_007 - Воскресенье, 04.05.2014, 18:05
 
Ответить
Сообщение[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
Дата добавления - 04.05.2014 в 17:30
RAN Дата: Воскресенье, 04.05.2014, 17:37 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Case else после каждой строчки ставить что-ли...

Если красный, то зеленый
Если зеленый, то синий
Если ни рыба. ни мясо, то серобуромалиновый
Вам точно поможет Choose.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Case else после каждой строчки ставить что-ли...

Если красный, то зеленый
Если зеленый, то синий
Если ни рыба. ни мясо, то серобуромалиновый
Вам точно поможет Choose.

Автор - RAN
Дата добавления - 04.05.2014 в 17:37
ant6729 Дата: Воскресенье, 04.05.2014, 18:02 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
[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]

Может, пример какие-то есть, я сам хотел бы догнать, как делать выбор


Сообщение отредактировал Serge_007 - Воскресенье, 04.05.2014, 18:04
 
Ответить
Сообщение[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
Дата добавления - 04.05.2014 в 18:02
RAN Дата: Воскресенье, 04.05.2014, 18:26 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Будет пример, будет пример.
PS О не правильном синтаксисе функции молчок.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 04.05.2014, 18:29
 
Ответить
СообщениеБудет пример, будет пример.
PS О не правильном синтаксисе функции молчок.

Автор - RAN
Дата добавления - 04.05.2014 в 18:26
Alex_ST Дата: Воскресенье, 04.05.2014, 22:15 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Сделал 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 устанавливать цвета.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 05.05.2014, 09:18
 
Ответить
СообщениеСделал 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
Дата добавления - 04.05.2014 в 22:15
ant6729 Дата: Понедельник, 05.05.2014, 14:29 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Спасибо, с цветами понятно)
А какой принцип, если бы слова нужно было менять?
[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
[/vba]

Автор - ant6729
Дата добавления - 05.05.2014 в 14:29
RAN Дата: Понедельник, 05.05.2014, 14:43 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А какой принцип, если бы слова нужно было менять?

Если принцип (алгоритм) написания кода - он простой. Берем шило, меняем на мыло. Способов масса. В т.ч и тот, что вы выложили.

А вот принцип, по которому определяется, какое шило на какое мыло менять - сие есть ваша большая тайна.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
А какой принцип, если бы слова нужно было менять?

Если принцип (алгоритм) написания кода - он простой. Берем шило, меняем на мыло. Способов масса. В т.ч и тот, что вы выложили.

А вот принцип, по которому определяется, какое шило на какое мыло менять - сие есть ваша большая тайна.

Автор - RAN
Дата добавления - 05.05.2014 в 14:43
Alex_ST Дата: Понедельник, 05.05.2014, 15:09 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
ant6729,
1. В обработчике события Worksheet_BeforeDoubleClick Target.ActiveCell - это "масло масляное", т.к. при даблклике ячейка не активной быть не может.
2. Вы с использованием декларации With — End With всё-таки познакомились бы deal
с чего это вдруг после объявления 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]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщениеant6729,
1. В обработчике события Worksheet_BeforeDoubleClick Target.ActiveCell - это "масло масляное", т.к. при даблклике ячейка не активной быть не может.
2. Вы с использованием декларации With — End With всё-таки познакомились бы deal
с чего это вдруг после объявления 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]

Автор - Alex_ST
Дата добавления - 05.05.2014 в 15:09
ant6729 Дата: Понедельник, 05.05.2014, 15:40 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Спасибо еще раз))
 
Ответить
СообщениеСпасибо еще раз))

Автор - ant6729
Дата добавления - 05.05.2014 в 15:40
krosav4ig Дата: Понедельник, 05.05.2014, 19:11 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
а можно так?

[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
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Понедельник, 05.05.2014, 19:11
 
Ответить
Сообщениеа можно так?

[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
[/vba]

Автор - krosav4ig
Дата добавления - 05.05.2014 в 19:11
Alex_ST Дата: Понедельник, 05.05.2014, 20:40 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
а можно так?

а я разве не об этом примерно писал?
цвета в нужном порядке в Public-словарь загнать и оттуда считывать

Но, судя по уровню владения VBA топик-стартера, говорить про циклы, массивы, а тем более - словари, не стоило :)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
а можно так?

а я разве не об этом примерно писал?
цвета в нужном порядке в Public-словарь загнать и оттуда считывать

Но, судя по уровню владения VBA топик-стартера, говорить про циклы, массивы, а тем более - словари, не стоило :)

Автор - Alex_ST
Дата добавления - 05.05.2014 в 20:40
krosav4ig Дата: Вторник, 06.05.2014, 15:47 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Alex_ST, о том самом :)
Просто я исходя из уровня владения VBA топик-стартера решил все-таки написать пример реализации предложенного вами алгоритма, к тому же при использовании цикла в решении этой задачи есть пара нюансов, которые могут ввести в ступор новичка в программировании. В данном случае это невозможность использования обычного Else и необходимость выхода из цикла при срабатывании условия. Ну вот как-то так :) .

ant6729, я бы вам посоветовал для начала изучить синтаксис основных конструкций vba, типы данных и объектную модель excel (с общими сведениями объектной модели можно ознакомится по ссылке), на форуме есть раздел, где можно скачать справочники по excel и vba.


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеAlex_ST, о том самом :)
Просто я исходя из уровня владения VBA топик-стартера решил все-таки написать пример реализации предложенного вами алгоритма, к тому же при использовании цикла в решении этой задачи есть пара нюансов, которые могут ввести в ступор новичка в программировании. В данном случае это невозможность использования обычного Else и необходимость выхода из цикла при срабатывании условия. Ну вот как-то так :) .

ant6729, я бы вам посоветовал для начала изучить синтаксис основных конструкций vba, типы данных и объектную модель excel (с общими сведениями объектной модели можно ознакомится по ссылке), на форуме есть раздел, где можно скачать справочники по excel и vba.

Автор - krosav4ig
Дата добавления - 06.05.2014 в 15:47
Alex_ST Дата: Вторник, 06.05.2014, 16:10 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, чему я в первую очередь всегда пытаюсь научить новичков, так это использовать Option Explicit в случае если они в самом деле новички, а не "зубры" и хотят быть более-менее уверены в точности результатов работы макросов.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 06.05.2014, 16:10
 
Ответить
СообщениеНу, чему я в первую очередь всегда пытаюсь научить новичков, так это использовать Option Explicit в случае если они в самом деле новички, а не "зубры" и хотят быть более-менее уверены в точности результатов работы макросов.

Автор - Alex_ST
Дата добавления - 06.05.2014 в 16:10
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заливка ячеек по двойному клику (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!