Страницы: 1
RSS
Очистка галочки в ячейке при добавлении галочки в другой ячейке, и обратно
 
Добрый вечер, уважаемые господа!

Есть такой код, чтобы вставлять галочки одним кликом, и убирать двумя.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   If Target.Cells.Count > 1 Then Exit Sub

       If Not Intersect(Target, Range("A1,C1,E1")) Is Nothing Then

           Application.EnableEvents = False

           Target.Font.Name = "Marlett"

           Target = "a"

           Application.EnableEvents = True

       End If

End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

   If Not Intersect(Target, Range("A1,C1,E1")) Is Nothing Then

       Application.EnableEvents = False

       Cancel = True

       Target.ClearContents

       Application.EnableEvents = True

   End If

End Sub

Вопрос, можно ли добавить к этому функцию: если ставим галочку в одной ячейку, в другой стирается, и наоборот. В общем хотелось бы чтобы существовала толька одна галочка из трех.

Изменено: UrrrY88 - 04.03.2025 17:20:48
 
Здравствуйте.
Попробуйте добавить строку Range("A1,C1,E1") = ClearContents так
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub
       If Not Intersect(Target, Range("A1,C1,E1")) Is Nothing Then
           Application.EnableEvents = False
           Range("A1,C1,E1") = ClearContents 'добавил строчку
           Target.Font.Name = "Marlett"
           Target = "a"
           Application.EnableEvents = True
       End If
End Sub
Изменено: gling - 04.03.2025 18:10:09
 
Спасибо огромное, всё работает!
А можно ли прописать код для нескольких диапазонов.
Скинул пример, прописал в ячейках A4:C4, хотелось бы чтобы таким же образом работало в E4:G4, A7:C7, E7:G7 и т.д.
Пробовал, чего то не получается.
Изменено: UrrrY88 - 05.03.2025 15:52:29
 
Попробуйте вариант
Скрытый текст
Изменено: gling - 05.03.2025 11:08:44
 
Уважаемый gling, премного благодарен за помощь!
 
Не сочтите за наглость, но не могли бы еще немного помочь.
Никак алгоритм не пойму. Обучаться азам программирования время катастрофически не хватает.
Можно ли прописать так, чтобы в каждом вертикальном столбце D3:D11,D14:D19,E3:E11,E14:E19... также только одна галочка ставилась?
Пример во вложении.
Изменено: UrrrY88 - 05.03.2025 15:35:38
 
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    
    Dim xx As Long
    On Error Resume Next
    xx = WorksheetFunction.Match(Target.Cells(0, 1).Value, Array("Отлиное", "Уд.", "Неуд."), 0)
    On Error GoTo 0
    If xx = 0 Then Exit Sub
    Dim arr As Variant
    ReDim arr(1 To 3)
    arr(xx) = "a"
    
    Dim rr As Range
    Set rr = Cells(Target.Row, Target.Column - xx + 1).Resize(, 3)
    rr.Font.Name = "Marlett"
    rr.Value = arr
End Sub
 
МатросНаЗебре, а с другим вариантом (3) не поможете?
 
Цитата
написал:
Не сочтите за наглость
Вариант
Скрытый текст
 
Владимир, низкий Вам поклон и огромное спасибо за помощь!
 
Хотел добавить несколько разделов ещё, но чего-то не хватает...  
Изменено: UrrrY88 - 06.03.2025 12:15:04
 
И не совсем понял функцию If Target.Row < 12 Then


Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub
       If Not Intersect(Target, Range("D3:U11,D14:U19")) Is Nothing Then
           Application.EnableEvents = False
         If Target.Row < 12 Then
               Range(Cells(3, Target.Column), Cells(11, Target.Column)) = ClearContents
           Else
               Range(Cells(14, Target.Column), Cells(19, Target.Column)) = ClearContents
           End If
               Target.Font.Name = "Marlett"
               Target = "a"
           Application.EnableEvents = True
       End If
End Sub
 
If Target.Row < 12 Then проверяет строку активной ячейки. Если активная ячейка находится в строке <12, тогда очищаются ячейки  Range(Cells(3, Target.Column), Cells(11, Target.Column)) = ClearContents от 3 до 11 в столбце в котором сейчас активная ячейка (Target.Column) а если условие не выполняется т.е. активная ячейка находится в строке >=12 Тогда очищаются ячейки в строках Range(Cells(14, Target.Column), Cells(19, Target.Column)) = ClearContents от 14 до 19 того столбца где находится активная ячейка  (Target.Column).
Посмотрел файл. Не зная вашей задачи, не могу сказать правильно ли вы сделали. У вас при активации ячейки ниже строки 13, очищаются галочки во всех трех таблицах находящихся ниже. Если вам нужно очищать в каждой таблице отдельно, тогда нужно разделить таблицы условием, для каждой таблицы указать свою граничащую строку. А если у вас так и задумано, то тогда можно три строки кода объединить в одну.
Изменено: gling - 06.03.2025 12:29:57
 
Нужно очищать в каждой таблице отдельно. А каким кодом (условием) разобрать не могу. Всё методом "тыка" ибо дилетант)
Изменено: UrrrY88 - 06.03.2025 12:35:07
 
Вариант в файле. Можно использовать только одну процедуру, но оставил две. Если в ячейке есть галочка и вы её активируете, то галочка исчезнет. Если активируете пустую ячейку, то галочка появится только в этой ячейке. Если захотите удалить в этой ячейки галочку -- кликните 2 раза, захотите чтобы появилась вновь галочка -- кликните ещё 2 раза. Двойной клик можно закоментировать. Решайте сами.
 
Ещё раз преогромнейшее спасибо, очень помогли!
 
Добавил еще кое-чего (во вложении), не глянете?
Там по тому же принципу "одна галочка", только в трех клетках а не колонках, вроде правильно сделал.
Правда так и не разобрался как тоже самое провернуть в строках "3" и "5".
И не совсем понятна функция кодов:                                                                                        
                                            Vl = Target.Value      
                                      и If Vl <> "a" Then
 
Посмотрите этот вариант.
 
Спасибо большое,

а про это не просвятите??
Цитата
И не совсем понятна функция кодов:                                                                                                                                      
Vl = Target.Value                                            
и  If Vl <> "a" Then
 
В момент активации ячейки запоминается значение этой ячейки и далее, после очищения всех соседних ячеек, производится запись галочки в активную ячейку, но только при условии что до стирания всех данных эта ячейка была пуста.Т.е, если ячейка до записи была пустой, в ней пропишется галка, если в ячейке была галка и мы на неё тыкнули, то запись галки в ячейке не произойдёт. Происходит то же самое, что и при двойном клике на ячейку, если есть галка - стирается, нет галки - появляется. Надеюсь понятно объяснил.
 
Ну в целом вроде понял, спасибо!
 
А можно ли как-то разделить для двух горизонтальных зон?
В приложенном примере в Block #1 всё работает как надо (в каждой строке (1.,2.,3) ставится только одна галка), а как сделать чтобы также работало вдобавок и в Block #2 не пойму.
Помогите пожалуйста.
И может посоветуйте где про основные коды и их правильное написание почитать. Искал, везде как-то обрывками и размыто...
 
Цитата
написал:
А можно ли как-то разделить
Посмотрите вариант в файле.
 
Спасибо большое!!! :)  
Изменено: UrrrY88 - 19.03.2025 09:12:38
 
Цитата
написал:
Если в ячейке есть галочка и вы её активируете, то галочка исчезнет. Если активируете пустую ячейку, то галочка появится только в этой ячейке. Если захотите удалить в этой ячейки галочку -- кликните 2 раза, захотите чтобы появилась вновь галочка -- кликните ещё 2 раза.
Подскажите, а есть ли вариант сделать так чтобы при нажатии на ячейку галочка появлялась, затем при повторном нажатии (один клик вместо двух) исчезала, затем еще раз при одном клике на ту же ячейку снова появлялась, затем снова исчезала и так далее, в общем что-то типа чекбокса.
 
Цитата
написал:
сделать так чтобы при нажатии на ячейку галочка появлялась, затем при повторном нажатии (один клик вместо двух) исчезала
С левой кнопкой мыши так вряд ли получится, а вот с правой кнопкой можно. Вариант в файле. Кликайте в нужных ячейках правой кнопкой мыши.
 
Премного благодарен!
Страницы: 1
Читают тему
Наверх