2015-11-16 6 views
0

У меня есть рабочий лист со многими столбцами для ввода. Колонки, о которых идет речь, - это D, H и I. D и H - пониженные. Я - любой текстовый ввод. Я пытаюсь собрать сценарий VBA, чтобы, если выбор сделан в D2, тогда это заблокирует H2 и I2. Если выбор сделан в H2, то это закроет D2 и I2. Если текст введен в I2, тогда это закроет D2 и H2. Наконец, это нужно будет сделать для всего столбца D, H и I, чтобы каждая ячейка в этих столбцах имела одно и то же свойство, то есть D16 и H16 блокируются, если I16 заполняется и так далее, и так далее.Блокировать ячейки Excel 2013 на основе ввода других ячеек

Если это может быть реализовано формулами, я не против.

` Private Sub Worksheet_Change(ByVal Target As Cells) 
      If ActiveSheet.Cells(2, 4).Text = True Then 
'This is what I don't understand. I don't know what to set the text to. I'm trying to say if there's anything in the cell Then do the following... 
       ActiveSheet.Cells(2, 8).Locked = True 
       ActiveSheet.Cells(2, 9).Locked = True 
      Else 
       ActiveSheet.Cells(2, 8).Text = True Then 
       ActiveSheet.Cells(2, 4).Locked = True 
       ActiveSheet.Cells(2, 9).Locked = True 
      Else 
       ActiveSheet.Cells(2, 9).Text = True Then 
       ActiveSheet.Cells(2, 4).Locked = True 
       ActiveSheet.Cells(2, 8).Locked = True 
      End If 
    End Sub` 
+2

Так вы что-то пробовали? –

+0

Я не понимаю, как это происходит. Если он находится в D2, как H3 будет когда-либо затронут, учитывая, что пользователь никогда не будет выбирать D3? – findwindow

+0

@ScottCraner, я работал над этим, но не могу понять, как это сделать для моей ситуации: http://database.ittoolbox.com/groups/technical-functional/excel-l/how-to-lockunlock- a-excel-cell-on-the-content-of-another-cell-4625040 – Dominick

ответ

0

Попробуйте этот код, но не иметь в виду фиксации клеток, как не влияет, если лист не защищен. Также обратите внимание, что ByVal Target as Range - правильный синтаксис аргумента Worksheet_Change (не ByVal Target as Cells).

Private Sub Worksheet_Change(ByVal Target As Range) 

If Len(Target) Then 

    Select Case Target.Column 

     Case Is = 4 

      Me.Unprotect "pwd" 
      Cells(Target.Row, 8).Locked = True 
      Cells(Target.Row, 9).Locked = True 
      Me.Protect "pwd" 

     Case Is = 8 

      Me.Unprotect "pwd" 
      Cells(Target.Row, 4).Locked = True 
      Cells(Target.Row, 9).Locked = True 
      Me.Protect "pwd" 

     Case Is = 9 

      Me.Unprotect "pwd" 
      Cells(Target.Row, 4).Locked = True 
      Cells(Target.Row, 8).Locked = True 
      Me.Protect "pwd" 

    End Select 

End If 

End Sub 
+0

Спасибо! Однако, похоже, это дает мне ошибку времени выполнения. Ошибка времени выполнения «1004»: невозможно установить свойство Locked класса Range. Кроме того, все еще можно редактировать поля, которые, вероятно, связаны с ошибкой. Логика, которую вы имеете, имеет смысл читать, но я не знаю, как отлаживать ошибку, которую она дает. – Dominick

+0

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

+0

О, ладно. Позвольте мне попробовать. – Dominick

Смежные вопросы