Код VBA, чтобы пользователь не мог выбрать ячейку с определенным текстом - PullRequest
0 голосов
/ 31 января 2019

Я работаю над электронной таблицей, чтобы скопировать данные пользователей за предыдущий день, а затем удалить любые числовые значения, но в ячейках оставить «NA».Я хочу, чтобы пользователи не могли изменять / удалять ячейки, в которых все еще есть «NA».Я нашел некоторый код, который использовал OFFSET для перемещения вниз на одну ячейку, если была выбрана определенная ячейка (на основе строки и столбца), но я не смог выяснить, как использовать OFFSET для перемещения вниз на одну ячейку, если текущая ячейкасодержит "NA".(https://www.extendoffice.com/documents/excel/3820-excel-lock-cell-without-protecting-sheet.html) Этот рабочий лист уже заблокирован паролем, установленным для качества, поэтому я не могу ничего сделать, чтобы разблокировать электронную таблицу, затем выбрать ячейки «NA» для блокировки, затем снова заблокировать электронную таблицу, таким образом ищатворческий способ предотвратить выделение или изменение ячеек. Кроме того, код должен запускаться постоянно, а не только при выборе макроса для запуска. Есть идеи?

1 Ответ

0 голосов
/ 31 января 2019

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

Если вы можете предположить, что макросы включены, вы можете использовать события, чтобы либо запретить пользователю выбирать ячейку (аналогично рассмотренному вами СМЕЩЕНИЮ), либо вы можете отслеживать изменения вручную на скрытой вкладке, чтобы отметить измененияи поступайте с ними так, как считаете нужным.Существует множество способов достижения последнего, просто выполните поиск «Отслеживание изменений VBA на листе» и т. Д.

Таким образом, вы бы использовали метод OFFSET:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells(1, 1).Text = "NA" Then
        Beep
        Cells(Target.Row, Target.Column).Offset(0, 1).Select
    End If
End Sub

Сохранить вне забывайте, что это очень упрощенный метод.Это не помешает пользователям выбрать несколько ячеек (диапазон) и удалить содержимое.Также это не предотвратит вставку значений в диапазон, включающий «NA».

ОБНОВЛЕНИЕ: Ниже приведена улучшенная версия, которая по крайней мере не позволит пользователям выбирать несколько ячеек (для вставки вили удаление), если одна из ячеек содержит «NA».

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim testarea As Range
    Set testarea = Intersect(UsedRange, Target.Cells)
    If Not (testarea Is Nothing) Then
        Application.EnableEvents = False
        For Each cell_to_check In Intersect(UsedRange, Target.Cells)
            If cell_to_check.Text = "NA" Then
                Beep
                Cells(cell_to_check.Row, cell_to_check.Column).Offset(0, 1).Select
                Do Until Selection.Text <> "NA"
                    Selection.Offset(0, 1).Select
                Loop
                Exit For
            End If
        Next
        Application.EnableEvents = True
    End If
End Sub

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

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