|
|||
| Zixxx
19.06.12 — 08:26 |
Как в Excel запретить перетаскивание ячеек мышкой, но оставить возможность изменять данные в ячейке? |
||
| Андрюха
1 — 19.06.12 — 08:31 |
хороший вопрос |
||
| dk
2 — 19.06.12 — 08:41 |
вводить (изменять) данные на одном листе |
||
| kosts
3 — 19.06.12 — 08:49 |
(0) Через VB может быть |
||
| Zixxx
4 — 19.06.12 — 09:00 |
(2) Лист один, расчетов на нем нет |
||
| Zixxx
5 — 19.06.12 — 09:01 |
(3) Макросы могут отключить |
||
| БледноЗолотистый
6 — 19.06.12 — 09:07 |
Файл — Параметры — Дополнительно — Разрешить маркеры заполнения и перетаскивание ячеек |
||
| Андрюха
7 — 19.06.12 — 09:09 |
(6) Надо наибарот, запретить перетаскивание |
||
|
БледноЗолотистый 8 — 19.06.12 — 09:11 |
(7) Там нет пункта «Запретить», а снять галку догадается уж. |
|
У Excel’я есть такое одновременно хорошее и нехорошее свойство — при перетаскивании ячеек он меняет ссылки на эту ячейку. Иногда это здорово, но когда форма зашита, а при заполнении таблицы пользователь начинает перетаскивать ячейки, все ссылки сбиваются. Можно ли запретить изменение ссылок то есть если пользователь перетащил ячейку A1 в A2 ссылка в ячейке например B1 так бы и ссылалась на ячейку A1. |
|
|
Перетаскивание ячееек можно отменить в Сервис — Параметры — Правка. |
|
|
Indie Гость |
#3 29.04.2008 10:13:50 Спасибо брат, все так просто. |
Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Еще…Меньше
По умолчанию редактирование маркер заполнения и перетаскивания включено в Excel так что вы можете перемещать и копировать ячейки с помощью мыши:
-
Перемещая ячейку или диапазон ячеек, нанося указатель мыши на границу ячейки или диапазона ячеек, он изменяется на указатель
, а затем перетаскиванием ячейки в другое место.
-
Скопируйте ячейку или диапазон ячеек, удерживая на удержании CTRL указатель мыши на границе ячейки или диапазона ячеек, чтобы он перетащил указатель копирования
, а затем перетащил ячейку или диапазон ячеек в другое место.
-
Перетащите
, чтобы скопировать данные или заполнить смежные ячейки рядом данных.
При необходимости этот параметр можно включить или отключить, выключив следующие параметры:
-
Выберите Файл > Параметры.
-
В категории Дополнительные параметры в области Параметрыправки выберите или сберите параметр Включить параметры заполнения и перетаскивания ячеев.
Примечание: Чтобы предотвратить замену данных при перетаскивании маркера заполнения, убедитесь, что установлен флажок Предупреждать перед перезаписью ячеек. Если вы не хотите, чтобы Excel выводил сообщение о перезаписи ячеек, можно снять этот флажок.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нужна дополнительная помощь?
Как запретить 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
I have a spreadsheet where users input information into column A that is used in formulas in column B. B1 uses the information in A1, B2 uses in the information in A2, etc.
The sheet is «protected» to only allow users to select and change unlocked cells in column A. They should not be able to change the formatting or structure of the sheet. However, even when the sheet is protected, they are able to «move» cell contents by clicking on the frame of cell and dragging it onto another cell.
If they move A1 onto A2, B1 is now using the information in A2, and B2 gives a reference error.
I would like that, when a user «moves» a cell, a macro is fired that will undo the move.
How can I programmatically detect when a cell is moved or is there a different solution?
asked Aug 19, 2014 at 15:41
1
Does anyone know of a way to detect when a cell is moved programmatically, or have a different solution to my issue? Other than Microsoft not overlooking this issue with sheet protection
![]()
I have another solution.
Disable the drag-and-drop functionality in this workbook. The tricky part is that this is an Application-level setting, so you need to toggle it Enabled/Disabled based on which workbook is Active.
This is not exactly beginner level VBA but I have documented it in THIS ANSWER and provided a link to an XLSM file containing all of the sample code & modules.
answered Aug 19, 2014 at 15:53
David ZemensDavid Zemens
52.8k11 gold badges79 silver badges129 bronze badges
Realize this is an old post, but I came across it looking for the same thing so I’m sharing an alternate way to address this that I subsequently came up with.
Use the OFFSET function to reference the cells in your formula so that you don’t have to worry about the drag-and-drop moving the referenced cells. In the example, B1 references the value in A1, so in B1 use OFFSET(B1,0,-1) to reference A1.
eli-k
10.7k11 gold badges43 silver badges44 bronze badges
answered Aug 12, 2019 at 21:57


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