|
У Excel’я есть такое одновременно хорошее и нехорошее свойство — при перетаскивании ячеек он меняет ссылки на эту ячейку. Иногда это здорово, но когда форма зашита, а при заполнении таблицы пользователь начинает перетаскивать ячейки, все ссылки сбиваются. Можно ли запретить изменение ссылок то есть если пользователь перетащил ячейку A1 в A2 ссылка в ячейке например B1 так бы и ссылалась на ячейку A1. |
|
|
Перетаскивание ячееек можно отменить в Сервис — Параметры — Правка. |
|
|
Indie Гость |
#3 29.04.2008 10:13:50 Спасибо брат, все так просто. |
|
|||
| 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) Там нет пункта «Запретить», а снять галку догадается уж. |
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
Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Еще…Меньше
По умолчанию редактирование маркер заполнения и перетаскивания включено в Excel так что вы можете перемещать и копировать ячейки с помощью мыши:
-
Перемещая ячейку или диапазон ячеек, нанося указатель мыши на границу ячейки или диапазона ячеек, он изменяется на указатель
, а затем перетаскиванием ячейки в другое место.
-
Скопируйте ячейку или диапазон ячеек, удерживая на удержании CTRL указатель мыши на границе ячейки или диапазона ячеек, чтобы он перетащил указатель копирования
, а затем перетащил ячейку или диапазон ячеек в другое место.
-
Перетащите
, чтобы скопировать данные или заполнить смежные ячейки рядом данных.
При необходимости этот параметр можно включить или отключить, выключив следующие параметры:
-
Выберите Файл > Параметры.
-
В категории Дополнительные параметры в области Параметрыправки выберите или сберите параметр Включить параметры заполнения и перетаскивания ячеев.
Примечание: Чтобы предотвратить замену данных при перетаскивании маркера заполнения, убедитесь, что установлен флажок Предупреждать перед перезаписью ячеек. Если вы не хотите, чтобы Excel выводил сообщение о перезаписи ячеек, можно снять этот флажок.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нужна дополнительная помощь?
Есть ли способ отключить перетаскивание ячеек на всех листах без скрипта. Я знаю, что вы можете сделать это глобально, в программе Excel есть параметр, который отключает его локально на вашем компьютере. (ИНСТРУМЕНТЫ, ПАРАМЕТРЫ, РЕДАКТИРОВАНИЕ, флажок РАЗРЕШИТЬ НАПИСАНИЕ И УДАЛИТЬ) Но если кто-то еще заберет этот файл у вас, и его машина не отключит его, они могут перемещать ячейки и формулы с помощью перетаскивания.
Спасибо!
* Это с ** VBA (я не знаю об этом)
Под этой рабочей книгой в редакторе VBA (Alt + F11) в редакторе добавьте следующий код
Private Sub Workbook_Open()
Application.CellDragAndDrop = False
End Sub
Это отключит его, как только они откроют рабочую книгу, о которой идет речь. Единственным недостатком является то, что они будут отключать его на всех книгах, пока они не вернут его обратно.
Также они могут включить его после открытия, пройдя маршрут, который вы перечислили выше. Другой вариант — запускать процедуру каждый раз, когда они перемещаются по книге (хотя это утомительное решение).
Защитите лист.
Инструменты> Защита> Защитить лист …
Конечно, с опциями по умолчанию это также не позволяет пользователю делать другие вещи, кроме простого перетаскивания, и может быть излишним в вашем конкретном случае. Но в зависимости от того, что именно вы хотите сделать, вы можете найти набор вариантов защиты, которые соответствуют вашим потребностям.
ответ дан Jean-François Corbett2k


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