Есть табель. Содержит 4 вкладки. Люди выбираются во второй вкладке - напротив человека двукратным нажатием ЛКМ ставится галочка (через макрос). Отмена производится так же. При удалении галочки кнопкой Delete или Backspace макрос не срабатывает. Необходимо оставить все как есть, но добавить макрос, который бы срабатывал только в файле "Табель" при активации нужной вкладки или при открытии книги, запрещая нажатие кнопок на клавиатуре Delete или Backspace только в конкретном диапазоне.
Добрый день.
Есть табель. Содержит 4 вкладки. Люди выбираются во второй вкладке - напротив человека двукратным нажатием ЛКМ ставится галочка (через макрос). Отмена производится так же. При удалении галочки кнопкой Delete или Backspace макрос не срабатывает. Необходимо оставить все как есть, но добавить макрос, который бы срабатывал только в файле "Табель" при активации нужной вкладки или при открытии книги, запрещая нажатие кнопок на клавиатуре Delete или Backspace только в конкретном диапазоне.EvgenyAgeev
Я бы сделал немного иначе - по-другому бы написал Ваш макрос простановки галочек. Уже было собрался так и сделать, но в Вашем файле вообще никаких макросов (не говоря уж о 4-х листах) не оказалось, переписывать нечего.
Я бы сделал немного иначе - по-другому бы написал Ваш макрос простановки галочек. Уже было собрался так и сделать, но в Вашем файле вообще никаких макросов (не говоря уж о 4-х листах) не оказалось, переписывать нечего._Boroda_
А зачем нам кузнец весь файл? Сохраните в xlsb, заархивируйте, уменьшите кол-во данных А на почту нельзя - нарушение п.5о Правил форума. В личку можно только в ветке "Фриланс"
А зачем нам кузнец весь файл? Сохраните в xlsb, заархивируйте, уменьшите кол-во данных А на почту нельзя - нарушение п.5о Правил форума. В личку можно только в ветке "Фриланс"_Boroda_
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C5:C600")) Is Nothing Then With Application .EnableEvents = False On Error Resume Next .Undo .EnableEvents = True End With End If End Sub
[/vba]Это не отключение кнопок, но запрет изменения без двойного клика. Альтернатива - это игра с защитой листа. Доступ открывается на время работы по двойному клику, а в остальное время закрыт.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C5:C600")) Is Nothing Then With Application .EnableEvents = False On Error Resume Next .Undo .EnableEvents = True End With End If End Sub
[/vba]Это не отключение кнопок, но запрет изменения без двойного клика. Альтернатива - это игра с защитой листа. Доступ открывается на время работы по двойному клику, а в остальное время закрыт.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Среда, 05.06.2019, 11:54
Это не отключение кнопок, но запрет изменения без двойного клика. Альтернатива - это игра с защитой листа. Доступ открывается на время работы по двойному клику, а в остальное время закрыт.
Это работает. Спасибо!
Был еще вариант это сделать через Application.OnKey "{DEL}", "DEL_Proc": Application.OnKey "{Backspace}", "DEL_Proc" , но я так и не понял, почему это работает для всех открытых книг. Прописать, чтобы это работало для конкретного диапазона и для конкретной книги, не смог...
_Boroda_, прошу прощения за нарушения правил форума.
Это не отключение кнопок, но запрет изменения без двойного клика. Альтернатива - это игра с защитой листа. Доступ открывается на время работы по двойному клику, а в остальное время закрыт.
Это работает. Спасибо!
Был еще вариант это сделать через Application.OnKey "{DEL}", "DEL_Proc": Application.OnKey "{Backspace}", "DEL_Proc" , но я так и не понял, почему это работает для всех открытых книг. Прописать, чтобы это работало для конкретного диапазона и для конкретной книги, не смог...
_Boroda_, прошу прощения за нарушения правил форума.EvgenyAgeev
Сообщение отредактировал EvgenyAgeev - Среда, 05.06.2019, 13:03
_Boroda_, прошу прощения за нарушения правил форума.
Ничего страшного, бывает У меня такой вариант, разрешает ручной ввод (можно вводить любой символ, он все равно галочкой сделается) и удаление сразу для нескольких ячеек (через Контрл Ентер) [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("C5:C600")) Is Nothing Then Application.EnableEvents = False Cancel = True If Target <> "" Then Target.ClearContents Else Target.Font.Name = "Marlett" Target = "a" End If Application.EnableEvents = True End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) Set d0_ = Intersect(Target, Range("C5:C600")) If Not d0_ Is Nothing Then Application.ScreenUpdating = 0 Application.Calculation = 3 Application.EnableEvents = 0 With Sheets("Табель") For Each d_ In d0_ If d_.Value <> "" Then d_.Value = "a" End If s_ = d_.Offset(, -1) Set dt_ = .Columns(3).Find(s_) If dt_ Is Nothing Then If d_ <> "" Then For i = 3 To 999 Step 11 If .Cells(i, 3) = "" Then .Cells(i, 3).Value = s_ Exit For End If Next End If Else d_.ClearContents dt_.ClearContents End If Next d_ End With Application.EnableEvents = 1 Application.Calculation = 1 Application.ScreenUpdating = 1 End If End Sub
_Boroda_, прошу прощения за нарушения правил форума.
Ничего страшного, бывает У меня такой вариант, разрешает ручной ввод (можно вводить любой символ, он все равно галочкой сделается) и удаление сразу для нескольких ячеек (через Контрл Ентер) [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("C5:C600")) Is Nothing Then Application.EnableEvents = False Cancel = True If Target <> "" Then Target.ClearContents Else Target.Font.Name = "Marlett" Target = "a" End If Application.EnableEvents = True End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) Set d0_ = Intersect(Target, Range("C5:C600")) If Not d0_ Is Nothing Then Application.ScreenUpdating = 0 Application.Calculation = 3 Application.EnableEvents = 0 With Sheets("Табель") For Each d_ In d0_ If d_.Value <> "" Then d_.Value = "a" End If s_ = d_.Offset(, -1) Set dt_ = .Columns(3).Find(s_) If dt_ Is Nothing Then If d_ <> "" Then For i = 3 To 999 Step 11 If .Cells(i, 3) = "" Then .Cells(i, 3).Value = s_ Exit For End If Next End If Else d_.ClearContents dt_.ClearContents End If Next d_ End With Application.EnableEvents = 1 Application.Calculation = 1 Application.ScreenUpdating = 1 End If End Sub
ну тогда это надо ставить при активации листа, книги и снимать при деактивации их, тогда будет работать только на нужном листе, но сразу надо контролировать как то диапазон, где жмакнули …….
ну тогда это надо ставить при активации листа, книги и снимать при деактивации их, тогда будет работать только на нужном листе, но сразу надо контролировать как то диапазон, где жмакнули …….bmv98rus
Замечательный Временно просто медведь , процентов на 20.