Vba excel что бы не могли копировать

Содержание

  1. Vba excel что бы не могли копировать
  2. Метод Worksheet.Protect (Excel)
  3. Синтаксис
  4. Параметры
  5. Замечания
  6. Поддержка и обратная связь
  7. Vba excel что бы не могли копировать

Vba excel что бы не могли копировать

Ребят поиском воспользовался. Ногами не топчите.
Вкратце ситуация: Есть малое предприятие. 20 компов, локалка. Я занимаюсь построением базы данных в Exele. Один из компьютеров является сервеорм, на него после завершения редактирования я выкидываю готовый файл xls. С ним работают все сотрудники. Задача такова. Как сделать так, чтобы все могли его просматривать, но редактировать, И самое главное скопировать его на сторонний носитель или каким-либо иным способом унести его с предприятия не могли. таблица представляет огромную ценность для конкурентов.

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

В общем есть ли способы, чтобы реализовать поставленную задачу. ? может какие сторонние приложения.

Есть идея что можно сделать сервером ту машину, на которой я работаю, открыть доступ к одной из папок без возможности изменять данные. но от копирования это не защитит..

Полностью защититься от копирования информации и последующего выноса её с предприятия невозможно.

Если сотрудник может увидеть конфиденциальную информацию, и конкурент за неё заплатит, — тут уже ничего не спасёт (в крайнем случае, сотрудник сфотографирует таблицу на мониторе при помощи сотового телефона — от фотоаппарата защиты пока не придумали. )

Другое дело, можно максимально осложнить процесс копирования — но от профессионалов это всё равно не спасёт.

таблица представляет огромную ценность для конкурентов.

Насколько велика эта ценность в денежном эквиваленте?
Сколько Вы готовы потратить на защиту информации?
От этого во многом зависит решение.

Я бы посоветовал вообще не давать пользователям возможность работы с исходным файлом.
Написать макросы, которые обращаются к находящемуся на сервере запароленному файлу (или нескольким файлам), получают из него необходимую информацию (в зависимости от того, что запросил пользователь), и возвращают в новый файл Excel скриншоты нужных данных.
Вообще, конечно же, лучше было использовать для БД не Excel, а, к примеру, Access.

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

Источник

Метод Worksheet.Protect (Excel)

Защищает лист, чтобы его нельзя было изменить.

Синтаксис

expression. Защита (Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables )

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Password Необязательный Variant Строка, указывающая пароль для листа или книги с учетом регистра. Если этот аргумент опущен, можно снять защиту листа или книги, не используя пароль. В противном случае необходимо указать пароль для отмены защиты листа или книги. Если вы забыли пароль, вы не сможете снять защиту листа или книги.

Используйте надежные пароли, содержащие строчные и прописные буквы, цифры и знаки. В слабых паролях эти элементы не комбинируются. Надежный пароль: Y6dh!et5. Слабый пароль: House27. Длина паролей должна быть не меньше 8 символов. В парольной фразе лучше использовать 14 или более символов.

Очень важно запомнить пароль. Если вы его забудете, корпорация Майкрософт не сможет его восстановить. Храните пароли, записанные на бумаге, в безопасном месте вдали от информации, которую они защищают. DrawingObjects Необязательный Variant Значение true для защиты фигур. Значение по умолчанию — True. Contents Необязательный Variant Значение true для защиты содержимого. Для диаграммы это защищает всю диаграмму. Для листа это защищает заблокированные ячейки. Значение по умолчанию — True. Scenarios Необязательный Variant Значение true для защиты сценариев. Этот аргумент действителен только для листов. Значение по умолчанию — True. UserInterfaceOnly Необязательный Variant Значение true для защиты пользовательского интерфейса, но не макросов. Если этот аргумент опущен, защита применяется как к макросам, так и к пользовательскому интерфейсу. AllowFormattingCells Необязательный Variant Значение True позволяет пользователю форматировать любую ячейку на защищенном листе. Значение по умолчанию — False. AllowFormattingColumns Необязательный Variant Значение True позволяет пользователю форматировать любой столбец на защищенном листе. Значение по умолчанию — False. AllowFormattingRows Необязательный Variant Значение True позволяет пользователю форматировать любую строку на защищенном листе. Значение по умолчанию — False. AllowInsertingColumns Необязательный Variant Значение True позволяет пользователю вставлять столбцы на защищенный лист. Значение по умолчанию — False. AllowInsertingRows Необязательный Variant Значение True позволяет пользователю вставлять строки на защищенный лист. Значение по умолчанию — False. AllowInsertingHyperlinks Необязательный Variant Значение True позволяет пользователю вставлять гиперссылки на защищенный лист. Значение по умолчанию — False. AllowDeletingColumns Необязательный Variant Значение True позволяет пользователю удалять столбцы на защищенном листе, где каждая ячейка удаляемого столбца разблокирована. Значение по умолчанию — False. AllowDeletingRows Необязательный Variant Значение True позволяет пользователю удалять строки на защищенном листе, где каждая ячейка в удаляемой строке разблокирована. Значение по умолчанию — False. AllowSorting Необязательный Variant Значение True позволяет пользователю выполнять сортировку на защищенном листе. Каждая ячейка в диапазоне сортировки должна быть разблокирована или не защищена. Значение по умолчанию — False. AllowFiltering Необязательный Variant Значение True позволяет пользователю задавать фильтры на защищенном листе. Пользователи могут изменять условия фильтра, но не могут включать или отключать автоматический фильтр. Пользователи могут задавать фильтры для существующего автофильтра. Значение по умолчанию — False. AllowUsingPivotTables Необязательный Variant Значение True позволяет пользователю использовать отчеты сводной таблицы на защищенном листе. Значение по умолчанию — False.

Замечания

В предыдущих версиях, если применить этот метод с аргументом UserInterfaceOnly , равным True , а затем сохранить книгу, при повторном открытии книги будет полностью защищен весь лист (а не только интерфейс). Чтобы повторно включить защиту пользовательского интерфейса после открытия книги, необходимо снова применить этот метод, если параметр UserInterfaceOnly имеет значение True.

Если вы хотите внести изменения в защищенный лист, можно использовать метод Protect на защищенном листе, если указан пароль. Кроме того, другой метод — снять защиту листа, внести необходимые изменения, а затем снова защитить лист.

Незащищено означает, что ячейка может быть заблокирована (диалоговое окно Форматирование ячеек ), но включена в диапазон, определенный в диалоговом окне Разрешить пользователям изменять диапазоны , и пользователь отключил защиту диапазона паролем или был проверен с помощью разрешений NT.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Vba excel что бы не могли копировать

Почитала и сделала так:
[vba]

Теперь вылезла такая проблема:
пользователю разрешено вставлять данные в определенные ячейки, все остальные заблокированы, пользователь даже не может их выделить. Но если пользователь вставляет свои данные способом «копировать-вставить» — то те ячейки, которые он только что заполнил сразу же становятся заблокированными. А если пользователь ошибся — он не сможет изменить то, что вставил только что. Заблокированы листы с применением пароля и пароль пользователь знать не будет.
Как сделать так чтобы при любых способах вставки данных пользователя:
1) разрешенные к редактированию пользователем ячейки не блокировались;
2) сохранялось форматирование (в т.ч. УФ) в моем файле, а не то что пользователь откуда-то скопировал.

Почитала и сделала так:
[vba]

Теперь вылезла такая проблема:
пользователю разрешено вставлять данные в определенные ячейки, все остальные заблокированы, пользователь даже не может их выделить. Но если пользователь вставляет свои данные способом «копировать-вставить» — то те ячейки, которые он только что заполнил сразу же становятся заблокированными. А если пользователь ошибся — он не сможет изменить то, что вставил только что. Заблокированы листы с применением пароля и пароль пользователь знать не будет.
Как сделать так чтобы при любых способах вставки данных пользователя:
1) разрешенные к редактированию пользователем ячейки не блокировались;
2) сохранялось форматирование (в т.ч. УФ) в моем файле, а не то что пользователь откуда-то скопировал. ttv

Почитала и сделала так:
[vba]

Теперь вылезла такая проблема:
пользователю разрешено вставлять данные в определенные ячейки, все остальные заблокированы, пользователь даже не может их выделить. Но если пользователь вставляет свои данные способом «копировать-вставить» — то те ячейки, которые он только что заполнил сразу же становятся заблокированными. А если пользователь ошибся — он не сможет изменить то, что вставил только что. Заблокированы листы с применением пароля и пароль пользователь знать не будет.
Как сделать так чтобы при любых способах вставки данных пользователя:
1) разрешенные к редактированию пользователем ячейки не блокировались;
2) сохранялось форматирование (в т.ч. УФ) в моем файле, а не то что пользователь откуда-то скопировал. Автор — ttv
Дата добавления — 10.01.2018 в 11:59

Mikael Дата: Среда, 10.01.2018, 15:13 | Сообщение № 4

Private Sub Worksheet_Change(ByVal Target As Range)

With Application
If .CutCopyMode = 0 Then Exit Sub
.EnableEvents = 0
.Undo
Target.PasteSpecial Paste:=xlPasteValues
.EnableEvents = 1
End With ‘Application

Private Sub Worksheet_Change(ByVal Target As Range)

With Application
If .CutCopyMode = 0 Then Exit Sub
.EnableEvents = 0
.Undo
Target.PasteSpecial Paste:=xlPasteValues
.EnableEvents = 1
End With ‘Application

Private Sub Worksheet_Change(ByVal Target As Range)

With Application
If .CutCopyMode = 0 Then Exit Sub
.EnableEvents = 0
.Undo
Target.PasteSpecial Paste:=xlPasteValues
.EnableEvents = 1
End With ‘Application

ttv Дата: Четверг, 11.01.2018, 08:13 | Сообщение № 5

Получается, но только если защита на лист стоит без пароля. А когда защита с паролем — не работает. Что нужно добавить в макрос чтобы заработал и на запароленой защите листа?
На другие макросы я пишу самой первой строчкой кода вот такое
[vba]

Получается, но только если защита на лист стоит без пароля. А когда защита с паролем — не работает. Что нужно добавить в макрос чтобы заработал и на запароленой защите листа?
На другие макросы я пишу самой первой строчкой кода вот такое
[vba]

Получается, но только если защита на лист стоит без пароля. А когда защита с паролем — не работает. Что нужно добавить в макрос чтобы заработал и на запароленой защите листа?
На другие макросы я пишу самой первой строчкой кода вот такое
[vba]

Mikael Дата: Четверг, 11.01.2018, 12:04 | Сообщение № 6

ttv, сложно так сказать, где проблема. Пришлите текущий файл.
У меня все работает и под защитой с паролем, Вы сделали серые ячейки не защищаемыми? ПКМ -> формат ячеек -> защита -> снять галку «защищаемая ячейка»

ttv, сложно так сказать, где проблема. Пришлите текущий файл.
У меня все работает и под защитой с паролем, Вы сделали серые ячейки не защищаемыми? ПКМ -> формат ячеек -> защита -> снять галку «защищаемая ячейка»

Сообщение ttv, сложно так сказать, где проблема. Пришлите текущий файл.
У меня все работает и под защитой с паролем, Вы сделали серые ячейки не защищаемыми? ПКМ -> формат ячеек -> защита -> снять галку «защищаемая ячейка»

ttv Дата: Пятница, 12.01.2018, 10:07 | Сообщение № 7

серые ячейки не защищены и должны такими остаться. В эти ячейки пользователь вводит свои данные.
Проблема в том, что данные берутся из разных файлов, и как правило в эксель по умолчанию все ячейки в файле защищенные. Соответсвенно если пользователь копирует данные откуда-то, то и вставляет их в мою таблицу с этим же свойством защищенной ячейки. А мне надо чтобы макрос автоматически делал вставку только значений.
В общем — если копировать данные и вставлять через «щелчок ПКМ в самой таблице — вставить» — то все нормально. А если у пользователя много разных данных — копируют кусками сразу несколько, потом открывают мой файл и открывают окно буфера обмена и вот там щелкают на скопированное чтобы вставить в таблицу — то тогда только что вставленные ячейки получаются заблокированы.

серые ячейки не защищены и должны такими остаться. В эти ячейки пользователь вводит свои данные.
Проблема в том, что данные берутся из разных файлов, и как правило в эксель по умолчанию все ячейки в файле защищенные. Соответсвенно если пользователь копирует данные откуда-то, то и вставляет их в мою таблицу с этим же свойством защищенной ячейки. А мне надо чтобы макрос автоматически делал вставку только значений.
В общем — если копировать данные и вставлять через «щелчок ПКМ в самой таблице — вставить» — то все нормально. А если у пользователя много разных данных — копируют кусками сразу несколько, потом открывают мой файл и открывают окно буфера обмена и вот там щелкают на скопированное чтобы вставить в таблицу — то тогда только что вставленные ячейки получаются заблокированы.

серые ячейки не защищены и должны такими остаться. В эти ячейки пользователь вводит свои данные.
Проблема в том, что данные берутся из разных файлов, и как правило в эксель по умолчанию все ячейки в файле защищенные. Соответсвенно если пользователь копирует данные откуда-то, то и вставляет их в мою таблицу с этим же свойством защищенной ячейки. А мне надо чтобы макрос автоматически делал вставку только значений.
В общем — если копировать данные и вставлять через «щелчок ПКМ в самой таблице — вставить» — то все нормально. А если у пользователя много разных данных — копируют кусками сразу несколько, потом открывают мой файл и открывают окно буфера обмена и вот там щелкают на скопированное чтобы вставить в таблицу — то тогда только что вставленные ячейки получаются заблокированы.

Источник

Adblock
detector

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

Доброе всем утро!
Хочу запретить копирование-вставку данных на листе
Защитить не могу, потому что НУЖНО, чтобы юзер вводил данные в такие ячейки вручную
Как отрубить контекстное меню разобралась
Еще бы клавиши отключить: ctrl + c, например. Нашла в справке вот такую команду:
Application.OnKey «+^{RIGHT}», «»
Она блокирует комбинацию клавиш ctrl + shift + вправо. Подскажите, пожалуйста, как ее переделать, чтобы не выполнялись команды клавиш ctrl + c/x/v ?

В полете голова — важнее крыльев

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Думаю если прочтёте справку по команде SENDKEY то разберётесь.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Сергей

Пользователь

Сообщений: 11251
Регистрация: 01.01.1970

#3

07.05.2014 10:14:14

Цитата
Li$$@ пишет:  НУЖНО, чтобы юзер вводил данные в такие ячейки
вручную

А кая разница как он вводит вручную или вставкой если ручки кривые дак и руками вам введет не то

Лень двигатель прогресса, доказано!!!

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

Уже догадалась знак + убрать  :)  Правда, поняла, что команда на ленте остается и вот досада — работает. Посоветуйте, пожалуйста, что можно глянуть, чтобы и команду на ленте отключить …

В полете голова — важнее крыльев

 

Smiley

Пользователь

Сообщений: 530
Регистрация: 16.05.2013

Li$$@, а если попробовать привязать к этим кнопкам макросы? Допустим, при нажатии этих клавиш запускается макрос и вылетает окно: «Так делать низя»  :)  или «Введите данные вручную».

Изменено: Smiley07.05.2014 10:19:29

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

#6

07.05.2014 10:18:51

Цитата
Сергей пишет:
А кая разница как он вводит вручную или вставкой если ручки кривые дак и руками вам введет не то

Большая разница, Сергей, в ячейке — выпадающий список, который, к сожалению, только ограничивает ввод данных, но спокойно дает в такую ячейку данные вставлять.

В полете голова — важнее крыльев

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

#7

07.05.2014 10:20:29

Цитата
Smiley пишет:  …при нажатии этих клавиш запускается макрос и вылетает окно: «Так делать низя»ы?

Smiley , спасибо, мысль чудесная — я думаю, именно так и застращаю своих юзеров, и вебку на комп — и фотоотчет их удивленных и огорченных физиономий выложу ))

В полете голова — важнее крыльев

 

Smiley

Пользователь

Сообщений: 530
Регистрация: 16.05.2013

Li$$@, только смотрите, чтобы они потом все руками не делали :)

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

#9

07.05.2014 10:25:27

Цитата
Li$$@ пишет: … что можно глянуть, чтобы и команду на ленте отключить …

Остался еще вот этот вопрос — помогите, пожалуйста, понять — где искать возможность запретить копирование данных с помощью команд на ленте?

В полете голова — важнее крыльев

 

Smiley

Пользователь

Сообщений: 530
Регистрация: 16.05.2013

Li$$@, а копирование данных может быть произведено из этой же книги или из другой? Если из другой, то можно просто запретить открытие любой книги, кроме активной.

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#11

07.05.2014 10:54:57

Цитата
Li$$@ пишет:
но спокойно дает в такую ячейку данные вставлять.

Можно в обработчик Worksheet_SelectionChange записать проверку на вставляемые/вводимые данные в определенные ячейки. Этот вариант по моему проще, чем заморачиваться с отключением кнопок на вкладках ленты (для интерфейсов 2007 и старше это возможно только упражняясь с RibbonX). ИМХО.
Опять-же для совместимости с младшими версиями (если это надо конечно) необходимо предусмотреть отключение этих кнопок на старых панелях инструментов.

Изменено: Sanja07.05.2014 11:01:15

Согласие есть продукт при полном непротивлении сторон.

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

#12

07.05.2014 10:58:14

Цитата
Smiley пишет:
Li$$@ , а копирование данных может быть произведено из этой же книги или из другой? Если из другой, то можно просто запретить открытие любой книги, кроме активной.

Возможны оба варианта, но чаще — из текущей же с этого же листа

В полете голова — важнее крыльев

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

#13

07.05.2014 11:00:41

Цитата
Sanja пишет:
Можно в обработчик Worksheet_SelectionChange записать проверку на вставляемые/вводимые данные в определенные ячейки.

Спасибо за идею, сначала взбодрило, но потом поняла, что они (любимые юзеры) копируют целые строчки и потом ЗАБЫВАЮТ менять в них данные — а они же уже типо заполнены, причем — данными из списка же
Поэтому единственно приемлемый вариант в моем случае — заблокировать копипастинг, чтобы без вариантов — данные вносились в пустые ячейки вручную либо с помощью выпадающих списков

В полете голова — важнее крыльев

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

Кажется, в книженции Уокенбаха нашла раздел Управление лентой с помощью VBA — попробую почитать
Всем спасибо большое и хорошего дня :)

В полете голова — важнее крыльев

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#15

07.05.2014 11:03:09

Цитата
Li$$@ пишет:
Спасибо за идею, сначала взбодрило, но потом поняла

А Вы бы уже примерчик файла выложили, а мы постараемся помочь поконкретнее  ;)

Согласие есть продукт при полном непротивлении сторон.

 

ber$erk

Пользователь

Сообщений: 2735
Регистрация: 25.12.2012

тымс

Учимся сами и помогаем другим…

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

ber$erk,там про кнопки на ЛЕНТЕ ничего не сказано  ;)

Согласие есть продукт при полном непротивлении сторон.

 

ber$erk

Пользователь

Сообщений: 2735
Регистрация: 25.12.2012

#18

07.05.2014 11:09:07

Цитата
Для того, чтобы в нужной рабочей книге «заблокировать» использование команд Вырезать, Копировать, Вставить, Специальная вставка и Формат по образцу, а также горячих клавиш CTRL+X, CTRL+C, CTRL+V ….

а это что?

Учимся сами и помогаем другим…

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

#19

07.05.2014 11:10:34

Цитата
Sanja пишет:
А Вы бы уже примерчик файла выложили, а мы постараемся помочь поконкретнее

Я попробую вычитать че-нить полезное-дельное по моему вопросу и ежели ничего не выйдет, воспользуюсь этим предложением
Еще раз — спасибо :)

В полете голова — важнее крыльев

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

#20

07.05.2014 11:16:39

Цитата
ber$erk пишет:
Для того, чтобы в нужной рабочей книге «заблокировать» использование команд Вырезать, Копировать, Вставить, Специальная вставка и Формат по образцу , а также горячих клавиш CTRL+X, CTRL+C, CTRL+V ….а это что?

Проверила — рамка копирования не появляется при выполнении команды меню и нажатии на клавиши, но ленту не блокируют

В полете голова — важнее крыльев

 

Smiley

Пользователь

Сообщений: 530
Регистрация: 16.05.2013

Li$$@, а почему бы не запретить редактировать все ячейки, кроме используемых? Можно ведь выбрать редактируемые диапазоны, тогда никто не сможет скопировать.

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

Потому что в используемых ячейках НУЖНО вводить данные вручную (в частности — из выпадающих списков), и нельзя в них вставлять скопированные данные, только ручной ввод (когда забывают изменить скопированные данные — это ОЧЕНЬ плохо, это критично)

В полете голова — важнее крыльев

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#23

07.05.2014 11:19:22

Цитата
ber$erk пишет: а это что?

да собственно вот оно

Цитата
Li$$@ пишет: но ленту не блокируют

:)

Согласие есть продукт при полном непротивлении сторон.

 

Smiley

Пользователь

Сообщений: 530
Регистрация: 16.05.2013

Li$$@, посмотрите

эту

тему, может быть найдете для себя что-нибудь нужное.

 

Li$$@

Пользователь

Сообщений: 152
Регистрация: 31.01.2013

Вот файлик — они берут, копирую 4-ую строку, вставляют в пятую и ЗАБЫВАЮТ менять Код, например
Нужно — чтобы во все три столбца данные вносились только вручную, без копирования
При этом нужно оставить возможность вставить строку внутри таблицы

Я сюда уже вставила коды, которые блокируют клавиши и контекстное меню, но вопрос использования команд на ленте все еще актуален :(

Прикрепленные файлы

  • Книга1.xlsm (14.21 КБ)

В полете голова — важнее крыльев

 

Smiley

Пользователь

Сообщений: 530
Регистрация: 16.05.2013

Li$$@, доступ к коду тоже, как мне кажется, надо заблокировать или усложнить, а то мало ли найдутся умельцы. Имхо.

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#27

07.05.2014 12:34:16

Попробуйте по-КопиПастить различными методами (ячейку с кодом, всю строку и т.д.) может пригодится  :)

Прикрепленные файлы

  • Код.xlsm (15.9 КБ)

Согласие есть продукт при полном непротивлении сторон.

Хотя в Excel реализована общая защита рабочих книг и листов, этот грубый инструмент не может предоставить пользователям ограниченные привилегии — если только вы не примените какие-то трюки. [1] Управлять действиями пользователей можно путем ответов на события. События — это действия, которые происходят по мере того, как вы работаете с книгами и листами. Наиболее часто происходящие события — это открытие рабочей книги, ее сохранение и закрытие после завершения работы. Вы можете заставить Excel автоматически выполнять некоторый код Visual Basic в момент, когда происходит одно из этих событий.

Отключение в рабочей книге команды Сохранить

Можно сделать так, чтобы рабочую книгу нельзя было сохранить, и она открывалась в режиме «только для чтения». Для этого в вашей книге выполните команду Сохранить как и в окне Сохранение документа кликните на стрелку вниз на кнопке Сервис (рис. 1). Выберите опцию Общие параметры.

Рис. 1. Доступ к меню Общие параметры при сохранении книги Excel

Рис. 1. Доступ к меню Общие параметры при сохранении книги Excel

Скачать заметку в формате Word или pdf, примеры в формате Excel (файл содержит макросы)

В открывшемся окне Общие параметры (рис. 2) задайте Пароль для изменения и кликните на Рекомендовать доступ только для чтения. Кликните Ok, повторите ввод пароля, и сохраните книгу. Если появится окно Книга с таким именем уже существует, заменить ее? Кликните Да.

Рис. 2. Задание пароля для изменения книги в окне Общие параметры

Рис. 2. Задание пароля для изменения книги в окне Общие параметры

Отключение в рабочей книге команды Сохранить как

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

Событие Before Save, которое вы будете использовать в следующем коде, было впервые создано в Excel 97. Как предполагает его имя, это событие происходит перед сохранением рабочей книги, позволяя вам поймать действия пользователя еще перед этим фактом, выдать предупреждение и запретить Excel сохранять файл.

Перед тем как пытаться выполнить следующий трюк, обязательно сначала сохраните рабочую книгу в формате с поддержкой макросов *.xlsm. Если вы напишете этот код до того, как сохраните книгу, то не сможете более сохранять изменения.

Чтобы написать код, откройте рабочую книгу и пройдите по меню Разработчик –> Visual Basic. [2] В окне Microsoft Visual Basic for Applications перейдите в окно ProjectVBAProject. Если нужно раскройте строку VBAProject (Защита книги Excel от копирования и печати. Примеры) и правой кнопкой мыши щелкните на значке ЭтаКнига. Выберите опцию View Code (рис. 3). Откроется окно Защита книги Excel от копирования и печати. Примеры.xlsx — Эта книга (Code). Это окно частного модуля для объекта ЭтаКнига. Это важно, и вы не добьетесь цели, если запишите код в обычном модуле.

Рис. 3. Открыто окно частного модуля для объекта рабочей книги

Рис. 3. Открыто окно частного модуля для объекта ЭтаКнига

Введите следующий код (рис. 4) и нажмите сочетание клавиш Alt+Q, чтобы вернуться в Excel.

Option Explicit
Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim lReply As Long
    If SaveAsUI = True Then
        lReply = MsgBox("Sorry, you are not allowed to save this workbook as another name. " _
                & "Do you wish to save this workbook.", vbQuestion + vbOKCancel)
        Cancel = (lReply = vbCancel)
    If Cancel = False Then Me.Save
        Cancel = True
    End If
End Sub

Рис. 4. Код в частном модуле ЭтаКнига

Рис. 4. Код в частном модуле ЭтаКнига (чтобы увеличить изображение, кликните на картинке правой кнопкой мыши и выберите опцию Открыть картинку в новой вкладке)

Проверьте, что получилось. Выберите команду Файл –> Сохранить как, вы увидите сообщение о том, что эту книгу запрещено сохранять под другим именем (рис. 5).

Рис. 5. Сообщение о запрете на сохранение книги под другим именем

Рис. 5. Сообщение о запрете на сохранение книги под другим именем

Очень хитрые пользователи могут открыть редактор VBA, удалить код, и сохранить книгу в другом месте или с другим именем.

Запрет печати рабочей книги

Итак, вы запретили сохранение книги, копирование книги в другое место, но пользователи всё еще могут распечатать данные. При помощи события Excel Before Print можно отследить и предупредить действия пользователя. Как и ранее, откройте окно частного модуля для объекта ЭтаКнига и введите код:

Option Explicit
Private Sub workbook_BeforePrint(Cancel As Boolean)
    Cancel = True
    MsgBox "Выводить эту рабочую книгу на печать нельзя", vbInformation
End Sub

Закончив ввод кода, нажмите сочетание клавиш Alt+Q, чтобы вернуться в Excel. Теперь каждый раз, когда пользователи будут пытаться напечатать эту рабочую книгу, ничего не случится. Строка сообщения MsgBox не обязательна, но всегда полезно включать ее, хотя бы для того, чтобы проинформировать пользователя.

Если вы хотите, чтобы пользователи не могли печатать только определенные листы в книге, вместо предыдущего кода используйте следующий:

Option Explicit
Private Sub workbook_BeforePrint(Cancel As Boolean)
    Select Case ActiveSheet.Name
        Case "Sheet1", "Sheet2"
            Cancel = True
            MsgBox "Выводить этот рабочий лист на печать нельзя", vbInformation
    End Select
End Sub

Обратите внимание, что печать будет остановлена только для листов Sheet1 и Sheet2. Конечно, имена листов вашей рабочей книги могут быть любыми. Чтобы добавить их в список кода, запишите их в кавычках, разделяя запятыми. Если вы хотите запретить печать только одного листа, укажите только одно название в кавычках, не ставя запятую.

У хитрых пользователей всё еще останется возможность сделать скриншот экрана с вашей засекреченной книгой.

К сожалению, пользователи могут обойти эту защиту и иным путем. Им достаточно полностью отключить макросы. Для этого нужно пройти по меню Файл –> Параметры –> Центр управления безопасностью, и кликнуть на кнопке Параметры центра управления безопасностью. В открывшемся окне перейти на складку Параметры макросов и поставить переключатель в позицию Отключить все макросы без уведомления. С другой стороны, если в электронной таблице будут находиться и полезные для них макросы, пользователи, вероятно, включат использование макросов. Описанные трюки представляют собой просто удобную возможность и не обеспечивают мощной защиты данных.

[1] По материалам книги Д.Холи, Р.Холи. Excel 2007. Трюки, стр. 28–32

[2] Если вкладка Разработчик отсутствует, пройдите по меню Файл –> Параметры Excel –> Настроить ленту. Поставьте галочку напротив вкладки Разработчик.

Как запретить copy-paste на листах эксель?
Есть сложный документ, нагруженый форматируемыми ячейками, условными форматами и т.п. мутью. Часто возникает необходимость переностить данные из одного файла эксель в этот крутой, и ясен пень, особогениальные сотрудники делают это методом копи-пейст. При этом слетают условные форматирования, форматы ячеек — я уж молчу про границы и заливки. Вербальные и даже анальные внушения на предмет того точбы это не делать и перености рукаи не помогют — собственно хоче запретить это в самом файле.

Желательно чтобы выводилось сообщение о запрете или что-то в этом духе.


можно убрать возможность выделения ячеек, соответственно нельзя «в лоб» выделить и скопировать ячейки
В екселе 2003: пункт меню Сервис-Защита-Защитить лист и настраиваешь защиту по пунктам
В екселе 2007: вкладка Главная-блок Ячейки -Формат — Защитать лист… и настраиваешь защиту по пунктам

учти, что по умолчанию в формате ячеек по умолчанию включена защита ячейки (правая кнопка мышки по ячейке — Формат ячеек…- вкладка Защита)


Этот вариант совсем не катит — потому что должна оставатся возможность вносить значения РУКАМИ. Простыми, трудовыми, намазолеными менеджерскими руками… но БЕЗ возможности вставлять из буфера… ИЛИ если вставлять — то ТОЛЬКО значение — без форматирований, размеров текстов и т.п. чуши


Поппробуйте научить сотрудников вставлять только значения (ПКМ / специальная вставка) — эту функцию можно вывести на панельку и переназначить на нее сочетание клавишь Ctrl+V (если очень нужно). Но эту работу придется выполнять на каждой пользовательской машине.
Возможно VBA позволит сделать это лишь для указзанного файла.


Это как раз то что я сделал в первую очередь — запретил пользоваться обычной вставкой и научил юзать специальную. НО! выяснилось что даже при использовании специальной вставки вставляется не только значение но и условное_форматирование. Другими словами — действительно, вставляется только значение, но при этом впихивается и условное_форматирование… ИМХО это просто недоработка самого экселя — единственное решение которое я вижу это просто запретить использовать copy-paste полностью. Но если лист имеет структуру, защищён так чтобы часть ячеек редактировать а часть нет — то сделать это простыми методами нельзя… Мне бы подошёл и сложный — лишь бы он был…


Посмотрите такой вариант.
Кнопка на панели инструментов, в меню по ПКМ, комбинации Ctrl+v и Shift+Insert переназначены на вставку только значений, условное_форматирование не захватывается. Все это только на Лист1, в других листах и книгах все как обычно. Для нормальной встаки оставлен путь Правка-Вставить. Есть еще несколько путей обхода, но я думаю, что Вашим «особогениальным» не нужно будет их находить и поэтму не стал блокировать совсем все.

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Если честно — совершенно не понял как это сделано и как перенести в свой файл…


Мне кажется что тут проще сделать макрос, который просто будет запрещать вставлять что-либо и как-либо, с всплывающем сообщением (ЗАПРЕЩЕНО!ЕПТ!)

только я не знаю как такой макрос сделать  :)


Да вот в том то и дело что просто запретить его нежелательно — нужно сделать так чтобы по дефолту вставлялись ТОЛЬКО значения либо простой текст.


А я вставил в меню ПКМ следующий пункт и чуствую себя «нормально» :)

Sub AddShortCut()
        With ComBar.Controls.Add(Type:=msoControlButton)
            .OnAction = "MyPaste"
            .FaceId = 22
            .Caption = "Вставить значение"
        End With
End Sub

Private Sub MyPaste()
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


Цитата: _Boroda_ от 23.07.2009, 14:22
Дак я ж так и сделал
Если не получается вставить макросы в свой файл или, как я уже писал, в мой файл с макросами вставить свою табличку — присылай кусочек своего файла (предполагаю, что весит он немало).

Да я бы с радостью — но у меня 8 менеджеров и у каждого такой файл свой… не все же 8 присылать — тем более что там есть инфа которую не хотелось бы публично светить. Поэтому хочу разобраться сам.

Что такое этот макрос? Где он хранится и куда его собсно вставлять?
Наивно полагал что это какая-то особо-сложная формула в ячейке — а это оказывается что-то роде программы внутри файла… вот это и вызывает сложности — начиная от простого переноса, заканчивая тем как это привязывать к нужным листам и т.п.


Из всех предложенных вариантов, ничего не понял…
помогите, мне тоже нужна такая возможность «запрета вставки»…
не ужели нет какого нить простого макроса, с запретом кнопки вставки…???


Находясь в среде Excel нажмите «Alt+F11», откроется окно редактора VBA
Раскройте VBAProject(«Ваша Книга«) …  в модуле «ЭтаКнига» вставьте следующий код


Private Sub Workbook_Open()
    With Application
        .OnKey "^{v}", "MyPaste"
        .OnKey "+{INSERT}", "MyPaste"
        .Run ("AddMyPaste")
    End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'восстанавливаем всё на место при выходе
    With Application
        .OnKey "^{v}"
        .OnKey "+{INSERT}"
        .CommandBars("Cell").Reset  ' Восстановление системного контекстного меню ячейки
    End With
End Sub

затем, ПКМ по VBAProject вызываем меню и добавляем(insert) новый модуль
в Вновь созданный модуль вставьте следующий код


Sub AddMyPaste()
    With CommandBars("Cell").Controls.Add(Type:=msoControlButton, Before:=1)
        .OnAction = "MyPaste"
        .FaceId = 22
        .Caption = "Вставить значение"
    End With
End Sub

Private Sub MyPaste()
On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
End Sub

во вложении файл с кодом

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


Что-то у меня все равно вставляется…

я копирую данные из другого ексел файла, и вставляю в пример из вложения… и все равно вставляется, даже с заливкой и с линиями….

не понятно((


 А макросы включили?
В меню ПКМ «Вставить значение» появилось?

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


сделал все как описано…

а что за меню ПКМ?  я делал написано:

Цитироватьзатем, ПКМ по VBAProject вызываем меню и добавляем(insert) новый модуль
в Вновь созданный модуль вставьте следующий код

и туда вставлял код


ПКМ — Правая Кнопка Мышки

Если Вы запускаете файл и Разрешаете запуск макросов, то в меню ПКМ на ячейке(когда выделена одна/группа ячеейк, а не строка или столбец) должен появиться новый пункт «Вставить значение», если такового не появилось, значит макросы отключены. Возможно, Вам надо сменить уровень безопасности Excel на менее «жесткий» (Сервис/Параметры/Безопасность/Безопасность макросов) Рекомендую «Среднюю» поставить.

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


все, я понял…. макрос работает….

только вот никакого запрета  copy-paste тут нет. Ведь необходимо чтобы вообще никак нельзя было вставить скопированное…

вот в чем вопрос…)


Что Вам мешает?
Включите воображение

Private Sub MyPaste()
      msgbox("Здесь нельзя вставить скопированное :)")
End Sub

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


Если через Ctrl +V или shift +insert, то вставку блокирует… но вот если вставлять через Правка — Вставить, то все равно вставляется. Можно ли как то и это заблокировать? :)


Если для Вас так важно, что бы изменения не вносились в лист, то не проще ли воспользоваться стандартными средствами (Защитить Лист)
Во вложении файл, который кроме клавишь отключает Вставку изо всех контекстных меню.
Это максимум, что я могу для Вас сделать.  ;)

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


спасибо!! все отлично работает)) ;)


boa
у меня опять проблема…запускал вам пример дома на 2007 excel’e, все работало… а вот на работе на 2003, почему то через Правка-Вставить, все равно вставляется… хотя в меню ПКМ — Вставить, блокируется…
непонятно((


Странно, в 2007-м тоже должно вставляться из меню панели
я не знаю как отключить эту вставку

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • запрет copy-paste

We have a workbook that has a lot of tables set up where users are supposed to enter data. These tables are ready by Power Query and/or VBA macros to do things with.

The problem is despite much education and wailing and gnashing of teeth, users refuse to consistently and reliabily use Paste|Values to prevent formatting, incorrect data types, or even creating formula links to other workbooks, which invariably causes Power Query or VBA code to fail. Even using Excel’s Data Validation doesn’t work because that ignores Paste operations, so you can paste text in to a formula only cell, etc.

This workbook already has VBA, so being a macro workbook is no problem.

I want to block paste. 100% of PASTE operations, and prefer to block CUT but I’m ok if CUT isn’t blocked as no one yet has done that to cause an issue. I prefer that COPY remain intact as the results of this workbook are needed for other workbooks, emails, etc.

I’ve tried Ken Puls’ solution here but in Excel for Office 365, which is around build 1905 right now, while CTRL-V is blocked, the Paste icons in the right-click menu and ribbon menu still work. Oddly enough, the COPY and CUT options are blocked, so something in Excel must have been changed since his post.

So I am currently using Tom Urtis’ solution here which does work, but is absolutely draconian. His method is to disable the right-click menu entirely, but actually doesn’t block CTRL-V, the nor the «menu key» on many keyboards today as long as the clipboard data originated from outside Excel. Data copied from other Excel workbooks will not paste, unless someone figures out they can launch a second copy of Excel, and they will.

So, any ideas? 

Понравилась статья? Поделить с друзьями:
  • Vba excel чтение ячеек
  • Vba excel числовые форматы
  • Vba excel числовое значение ячеек
  • Vba excel число столбцов
  • Vba excel число переменная