Всем доброго времени суток! Помогите пожалуйста! Есть макрос на блокировку вставки через ctrl+v, нашёл на каком-то сайте! проблема в том что он либо глючиный либо не правильно вставляю! действие его расспространяется не только на книгу но на всё что открыто в формате Эксель! помоготе исправить ошибку! макрос нужно использовать в 68 книгах! макрос вот Всем большое спасибо! [vba]
Код
Private Sub Workbook_Open() Dim cbBar As CommandBar With Application .OnKey "^{v}", "MyPaste" .OnKey "+{INSERT}", "MyPaste" For Each cbBar In .CommandBars On Error Resume Next cbBar.Controls("Вст&авить").OnAction = "MyPaste" Next cbBar ' With CommandBars("Cell").Controls.Add(Type:=msoControlButton, Before:=1) ' .OnAction = "MyPaste" ' .FaceId = 22 ' .Caption = "Вставить значение" ' End With End With End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'восстанавливаем всё на место при выходе Dim cbBar As CommandBar With Application .OnKey "^{v}" .OnKey "+{INSERT}" For Each cbBar In .CommandBars On Error Resume Next cbBar.Reset Next cbBar End With End Sub
[/vba]
Всем доброго времени суток! Помогите пожалуйста! Есть макрос на блокировку вставки через ctrl+v, нашёл на каком-то сайте! проблема в том что он либо глючиный либо не правильно вставляю! действие его расспространяется не только на книгу но на всё что открыто в формате Эксель! помоготе исправить ошибку! макрос нужно использовать в 68 книгах! макрос вот Всем большое спасибо! [vba]
Код
Private Sub Workbook_Open() Dim cbBar As CommandBar With Application .OnKey "^{v}", "MyPaste" .OnKey "+{INSERT}", "MyPaste" For Each cbBar In .CommandBars On Error Resume Next cbBar.Controls("Вст&авить").OnAction = "MyPaste" Next cbBar ' With CommandBars("Cell").Controls.Add(Type:=msoControlButton, Before:=1) ' .OnAction = "MyPaste" ' .FaceId = 22 ' .Caption = "Вставить значение" ' End With End With End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'восстанавливаем всё на место при выходе Dim cbBar As CommandBar With Application .OnKey "^{v}" .OnKey "+{INSERT}" For Each cbBar In .CommandBars On Error Resume Next cbBar.Reset Next cbBar End With End Sub
- Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)
И файл не приложился - max 100 кг. Но это не обязательно, и так все понятно. Да, еще - этот макрос, судя по всему, написан для 2003 Excel, а в 2007 и выше в меню вставки на правой кнопке мыши не только "Вставить", но и еще куча всего для вставки
- Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)
И файл не приложился - max 100 кг. Но это не обязательно, и так все понятно. Да, еще - этот макрос, судя по всему, написан для 2003 Excel, а в 2007 и выше в меню вставки на правой кнопке мыши не только "Вставить", но и еще куча всего для вставки_Boroda_
через что бы через мышку не смогли вставлять, это уже заоблочно! хотя бы это поправить! по тому что работать будут муницыпалы! а там не великие хакеры! увидят что так нельзя пытаться мышкой не будут!
через что бы через мышку не смогли вставлять, это уже заоблочно! хотя бы это поправить! по тому что работать будут муницыпалы! а там не великие хакеры! увидят что так нельзя пытаться мышкой не будут!Николай_89
Замените Workbook_Open на Workbook_Activate и Workbook_BeforeClose на Workbook_Deactivate
Сейчас у Вас что получается? Вы открываете книгу с макросомWorkbook_Open и этот макрос для всего Excel убирает возможность Контрл+v и Контрл+Инсерт (ну и до кучи пытается что-то поменять на панели инструментов). И будет этот запрет висеть до того момента, пока Вы книгу не закроете, тогда отрабатывает макрос Workbook_BeforeClose, возвращающий все взад А если включать запрет только если книга активирована и выключать при деактивации, то по идее должнен быть запрет только тогда, когда с этой книгой работают
Кстати да, те макросы, которые были, оставьте тоже. У Вас тогда будет не 2, а 4 макроса
А лучше вообще вот так написать [vba]
Код
Private Sub Workbook_Activate() vkl End Sub Private Sub Workbook_Open() vkl End Sub
Private Sub Workbook_Deactivate() vykl End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) vykl End Sub
Sub vkl() With Application .OnKey "^{v}", "MyPaste" .OnKey "+{INSERT}", "MyPaste" End With End Sub Sub vykl() With Application .OnKey "^{v}" .OnKey "+{INSERT}" End With End Sub
[/vba]
*** Поправил Workbook_BeforeClose
Замените Workbook_Open на Workbook_Activate и Workbook_BeforeClose на Workbook_Deactivate
Сейчас у Вас что получается? Вы открываете книгу с макросомWorkbook_Open и этот макрос для всего Excel убирает возможность Контрл+v и Контрл+Инсерт (ну и до кучи пытается что-то поменять на панели инструментов). И будет этот запрет висеть до того момента, пока Вы книгу не закроете, тогда отрабатывает макрос Workbook_BeforeClose, возвращающий все взад А если включать запрет только если книга активирована и выключать при деактивации, то по идее должнен быть запрет только тогда, когда с этой книгой работают
Кстати да, те макросы, которые были, оставьте тоже. У Вас тогда будет не 2, а 4 макроса
А лучше вообще вот так написать [vba]
Код
Private Sub Workbook_Activate() vkl End Sub Private Sub Workbook_Open() vkl End Sub
Private Sub Workbook_Deactivate() vykl End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) vykl End Sub
Sub vkl() With Application .OnKey "^{v}", "MyPaste" .OnKey "+{INSERT}", "MyPaste" End With End Sub Sub vykl() With Application .OnKey "^{v}" .OnKey "+{INSERT}" End With End Sub
Так Получается то что вы до писали мне это всё вставить на месчто того что было!? да есть стоит в модуле ругательство для тех кто по пытается вставить)))
Так Получается то что вы до писали мне это всё вставить на месчто того что было!? да есть стоит в модуле ругательство для тех кто по пытается вставить)))Николай_89
Sub Макрос1() ' Сочетание клавиш: Ctrl+м Application.CutCopyMode = False End Sub Sub Макрос2() ' Сочетание клавиш: Ctrl+v Application.CutCopyMode = False End Sub
Sub Макрос1() ' Сочетание клавиш: Ctrl+м Application.CutCopyMode = False End Sub Sub Макрос2() ' Сочетание клавиш: Ctrl+v Application.CutCopyMode = False End Sub
Можно. Но Николай_89, Вы бы объяснили поподробнее, зачем Вам все это нужно. И зачем Вам ограничивать вставку в ВЕСЬ файл? Наверняка есть какой-то диапазон, который Вы пытаетесь таким образом защитить. Почему вдруг возникла такая мысль? Короче, Вы неправильно вопрос задаете - не нужно спрашивать "Как запретить вставку", это только один из методов решения, а нужно примерно вот так: "Что делать, если в файле юзвери вставкой портят ..." (предположу, формат, что проверку данных или условное форматирование)
Можно. Но Николай_89, Вы бы объяснили поподробнее, зачем Вам все это нужно. И зачем Вам ограничивать вставку в ВЕСЬ файл? Наверняка есть какой-то диапазон, который Вы пытаетесь таким образом защитить. Почему вдруг возникла такая мысль? Короче, Вы неправильно вопрос задаете - не нужно спрашивать "Как запретить вставку", это только один из методов решения, а нужно примерно вот так: "Что делать, если в файле юзвери вставкой портят ..." (предположу, формат, что проверку данных или условное форматирование)_Boroda_
Да существует файл а точнее их 68 шт! а в этом файле часть через проверку данных, часть данных нужно вводить исключительно ручкамии! и так как на месте работают как молодёжь (ушлая), так и более приклонный возраст мной было решено ограничить по максимуму функцию вставки! для получения однообразных данных! а получается что ограничить могу только макросом который Вы мне помогли отредактировать!
Да существует файл а точнее их 68 шт! а в этом файле часть через проверку данных, часть данных нужно вводить исключительно ручкамии! и так как на месте работают как молодёжь (ушлая), так и более приклонный возраст мной было решено ограничить по максимуму функцию вставки! для получения однообразных данных! а получается что ограничить могу только макросом который Вы мне помогли отредактировать!Николай_89