Excel, що дозволяє видалити вміст комірки з перевіреної даних комірки


2

У мене є робочий аркуш, де розблокуються лише комірки, які слід редагувати, а потім весь захищений аркуш захищений. Одна з комірок, де дозволено редагування, має набір перевірки даних на основі списку 2 елементів. Перевірка даних налаштована так, щоб дозволити а Listта відповідний діапазон для Source.

Перевірка працює до точки, оскільки вибір одного з двох варіантів у спадному меню приймається, а введення значення, яке не міститься у списку, відхиляється.

Проблема, яка у мене виникає, полягає в тому, що Excel дозволяє мені видаляти вміст зазначеної комірки (чого я не хочу - я хочу, щоб у списку завжди було одне з двох значень). У вікні перевірки даних я спробував перевірити і зняти Ignore blankпрапорець, що, схоже, не має ніякого ефекту.

В ідеалі я хотів би зробити це без потреби VBA, але поступаюся, якщо це єдиний шлях.

Ось посилання на приклад робочої книги - бо Option4xвам дозволяється вибирати будь-який із варіантів, що випадає, але не дозволяється вводити випадковий текст. Однак вам також дозволено видаляти вміст комірки (чого я не хочу).

Зображення


Чи можете ви завантажити або надати посилання Аркуша для кращого розуміння?
Раджеш S

@RajeshS просто додав посилання до прикладу робочої книги та додав скріншот
Jonny Wright

Моя перша реакція. Що я помітив, що Data Rage C5: L15 незахищений, у стовпці C Cell C9 є випадаючий список, працює належним чином, фактична редагована область D6: L12, решта аркуша захищена. Тепер скажи мені проблему !!
Rajesh S

Відповіді:


2

Перевірка даних лише перевіряє, чи введені дані відповідають правилам / списку чи ні. Оскільки Осередок редагується, то причина Excel дозволяє видалити введені дані, але не дозволяє виписувати зі списку.

Якщо ви не дозволяєте видаляти підтверджені дані, вам потрібно вимкнути клавішу Delete. Написаний нижче зразок коду допоможе вам запобігти вправам.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$C$9" Then Exit Sub
   If Len(Target.Value) = 0 Then
        Application.EnableEvents = False
          Application.Undo
        MsgBox "You can't Delete,,,!"
     Application.EnableEvents = True
   End If

End Sub

Примітка: Оскільки у Excel немає жодної функції, яка може запобігти клітинку, то в цьому випадку працюватиме лише VBA.


Дякую - наданий код не спрацьовував так, як я сподівався, але привів мене до правильної лінії. Соромно, що функціонал не вбудований, але якщо це так, як це потрібно зробити, то так і буде. Я запропонував редагувати і позначатимуть як прийняте, якщо / коли редакція буде затверджена.
Джоні Райт

Приємно почути від вас @JonnyWright. За допомогою перевірки даних ми можемо поставити чек на НЕ ЗАЛИШУВАТИ КЛІТКУ БОЛЬШОЮ, але у випадку НЕ ВИДАЛИТИ, деактивація ключа є єдиним варіантом.
Rajesh S
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.