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

Вход

Регистрация

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

 

= Мир MS Excel/Запрет на нажатие Del и Backspace в конкретном диапазоне - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет на нажатие Del и Backspace в конкретном диапазоне (Макросы/Sub)
Запрет на нажатие Del и Backspace в конкретном диапазоне
EvgenyAgeev Дата: Среда, 05.06.2019, 11:09 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel для Mac
Добрый день.

Есть табель. Содержит 4 вкладки. Люди выбираются во второй вкладке - напротив человека двукратным нажатием ЛКМ ставится галочка (через макрос). Отмена производится так же. При удалении галочки кнопкой Delete или Backspace макрос не срабатывает. Необходимо оставить все как есть, но добавить макрос, который бы срабатывал только в файле "Табель" при активации нужной вкладки или при открытии книги, запрещая нажатие кнопок на клавиатуре Delete или Backspace только в конкретном диапазоне.
К сообщению приложен файл: 3010865.xlsm (9.6 Kb)


Сообщение отредактировал EvgenyAgeev - Среда, 05.06.2019, 11:09
 
Ответить
СообщениеДобрый день.

Есть табель. Содержит 4 вкладки. Люди выбираются во второй вкладке - напротив человека двукратным нажатием ЛКМ ставится галочка (через макрос). Отмена производится так же. При удалении галочки кнопкой Delete или Backspace макрос не срабатывает. Необходимо оставить все как есть, но добавить макрос, который бы срабатывал только в файле "Табель" при активации нужной вкладки или при открытии книги, запрещая нажатие кнопок на клавиатуре Delete или Backspace только в конкретном диапазоне.

Автор - EvgenyAgeev
Дата добавления - 05.06.2019 в 11:09
_Boroda_ Дата: Среда, 05.06.2019, 11:14 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я бы сделал немного иначе - по-другому бы написал Ваш макрос простановки галочек. Уже было собрался так и сделать, но в Вашем файле вообще никаких макросов (не говоря уж о 4-х листах) не оказалось, переписывать нечего.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЯ бы сделал немного иначе - по-другому бы написал Ваш макрос простановки галочек. Уже было собрался так и сделать, но в Вашем файле вообще никаких макросов (не говоря уж о 4-х листах) не оказалось, переписывать нечего.

Автор - _Boroda_
Дата добавления - 05.06.2019 в 11:14
sboy Дата: Среда, 05.06.2019, 11:15 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
ставится галочка (через макрос)

и где этот макрос?


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
ставится галочка (через макрос)

и где этот макрос?

Автор - sboy
Дата добавления - 05.06.2019 в 11:15
EvgenyAgeev Дата: Среда, 05.06.2019, 11:19 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel для Mac
Могу отправить на почту, т.к. файл в архиве весит 360 Кб :(
 
Ответить
СообщениеМогу отправить на почту, т.к. файл в архиве весит 360 Кб :(

Автор - EvgenyAgeev
Дата добавления - 05.06.2019 в 11:19
_Boroda_ Дата: Среда, 05.06.2019, 11:24 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А зачем нам кузнец весь файл? Сохраните в xlsb, заархивируйте, уменьшите кол-во данных
А на почту нельзя - нарушение п.5о Правил форума. В личку можно только в ветке "Фриланс"


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА зачем нам кузнец весь файл? Сохраните в xlsb, заархивируйте, уменьшите кол-во данных
А на почту нельзя - нарушение п.5о Правил форума. В личку можно только в ветке "Фриланс"

Автор - _Boroda_
Дата добавления - 05.06.2019 в 11:24
EvgenyAgeev Дата: Среда, 05.06.2019, 11:24 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel для Mac
Ссылка на сам файл
Внешняя ссылка удалена администрацией - это нарушение п.3 Правил форума


Сообщение отредактировал EvgenyAgeev - Среда, 05.06.2019, 11:25
 
Ответить
СообщениеСсылка на сам файл
Внешняя ссылка удалена администрацией - это нарушение п.3 Правил форума

Автор - EvgenyAgeev
Дата добавления - 05.06.2019 в 11:24
EvgenyAgeev Дата: Среда, 05.06.2019, 11:39 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel для Mac
Файл во вложении)
К сообщению приложен файл: _2019.rar (81.1 Kb)
 
Ответить
СообщениеФайл во вложении)

Автор - EvgenyAgeev
Дата добавления - 05.06.2019 в 11:39
bmv98rus Дата: Среда, 05.06.2019, 11:53 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
[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]Это не отключение кнопок, но запрет изменения без двойного клика.
Альтернатива - это игра с защитой листа. Доступ открывается на время работы по двойному клику, а в остальное время закрыт.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Среда, 05.06.2019, 11:54
 
Ответить
Сообщение[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
Дата добавления - 05.06.2019 в 11:53
EvgenyAgeev Дата: Среда, 05.06.2019, 13:00 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel для Mac
Это не отключение кнопок, но запрет изменения без двойного клика.
Альтернатива - это игра с защитой листа. Доступ открывается на время работы по двойному клику, а в остальное время закрыт.


Это работает. Спасибо!

Был еще вариант это сделать через Application.OnKey "{DEL}", "DEL_Proc": Application.OnKey "{Backspace}", "DEL_Proc" , но я так и не понял, почему это работает для всех открытых книг. Прописать, чтобы это работало для конкретного диапазона и для конкретной книги, не смог...

_Boroda_, прошу прощения за нарушения правил форума.


Сообщение отредактировал EvgenyAgeev - Среда, 05.06.2019, 13:03
 
Ответить
Сообщение
Это не отключение кнопок, но запрет изменения без двойного клика.
Альтернатива - это игра с защитой листа. Доступ открывается на время работы по двойному клику, а в остальное время закрыт.


Это работает. Спасибо!

Был еще вариант это сделать через Application.OnKey "{DEL}", "DEL_Proc": Application.OnKey "{Backspace}", "DEL_Proc" , но я так и не понял, почему это работает для всех открытых книг. Прописать, чтобы это работало для конкретного диапазона и для конкретной книги, не смог...

_Boroda_, прошу прощения за нарушения правил форума.

Автор - EvgenyAgeev
Дата добавления - 05.06.2019 в 13:00
_Boroda_ Дата: Среда, 05.06.2019, 14:07 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
_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
[/vba]
К сообщению приложен файл: _2019_2.xlsb (59.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
_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
[/vba]

Автор - _Boroda_
Дата добавления - 05.06.2019 в 14:07
bmv98rus Дата: Среда, 05.06.2019, 14:26 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
это сделать через Application.OnKey "{DEL}",
ну тогда это надо ставить при активации листа, книги и снимать при деактивации их, тогда будет работать только на нужном листе, но сразу надо контролировать как то диапазон, где жмакнули …….


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
это сделать через Application.OnKey "{DEL}",
ну тогда это надо ставить при активации листа, книги и снимать при деактивации их, тогда будет работать только на нужном листе, но сразу надо контролировать как то диапазон, где жмакнули …….

Автор - bmv98rus
Дата добавления - 05.06.2019 в 14:26
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет на нажатие Del и Backspace в конкретном диапазоне (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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