2016-06-18 6 views
1

Мне нужно, чтобы пользователи вставляли да/нет в столбец C. Если нет, следующая ячейка должна отображать N/A и заполнять ее как серый. Если да, следующая ячейка должна быть выделена желтым цветом и позволит пользователям заполнять эту ячейку.VBA - Изменения ячейки

Код приведен ниже, но если ячейка не имеет и затем была изменена на yes, следующая ячейка не изменится с N/A на выделенный.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim Cell As Range 
    If Target.Column = 3 Then 
     Set Cell = Target.Offset(0, 1) 
     If Len(Target.Value) = 0 Then 
      Cell.Validation.Delete 
      Cell.Value = vbNullString 
     Else 
      If Target.Value = "Yes" Then 
       With Cell.Validation 
        Cell.Interior.ColorIndex = 36 
       End With 
      ElseIf Target.Value = "No" Then 
       Cell.Validation.Delete 
       Cell.Value = "N/A" 
      Else 
       MsgBox "Input only Yes or No." 
       Target.ClearContents 
       Cell.Validation.Delete 
      End If 
     End If 
    End If 
    End Sub 

ответ

1

Это связано с тем, что вы добавили строку в блок if для условия да, чтобы изменить значение соседней ячейки. Кроме того, для блока no вы можете изменить цвет ячейки обратно на белый, иначе она останется желтой, как только она будет да раньше. Код ниже должен достичь того, чего вы хотите.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim Cell As Range 
    If Target.Column = 3 Then 
     Set Cell = Target.Offset(0, 1) 
     If Len(Target.Value) = 0 Then 
      Cell.Validation.Delete 
      Cell.Value = vbNullString 
     Else 
      If Target.Value = "Yes" Then 
       With Cell.Validation 
        Cell.Interior.ColorIndex = 36 
       End With 
       Cell.Value = "" 
      ElseIf Target.Value = "No" Then 
       Cell.Validation.Delete 
       Cell.Value = "N/A" 
       Cell.Interior.ColorIndex = 0 
      Else 
       MsgBox "Input only Yes or No." 
       Target.ClearContents 
       Cell.Validation.Delete 
      End If 
     End If 
    End If 
    End Sub 
0

попробовать

If target.value = "yes" then 
    cell.validation.delete 
    cell.interior.color = vbyellow 
    cell.clearcontents 
end if 
0
  • Вам необходимо включить EnableEvents пока вы очистить содержимое ячейки. Так что Worksheet_Change не запускается снова. В противном случае вы застряли в петле.
  • Вы не используете Excel встроенный в Cell Validation вы делаете вы Validation
  • То, что вы хотите сделать, может быть и должно быть сделано с помощью Excel встроенный в Cell Validation и условное форматирование.

    • Этот метод не работает, если пользователь влияет на значение ячейки более чем на 1 ячейку, проверка ячейки и условное форматирование будут по-прежнему работать должным образом.

    Private Sub Worksheet_Change (ByVal Target As Range) Dim Cell Как Range

    If Target.Column = 3 Then 
        Application.EnableEvents = False 
        Set Cell = Target.Offset(0, 1) 
        With Cell.Interior 
         If Target.Value = "Yes" Then 
          'Change Cell Color to Yellow 
          .ColorIndex = 36 
         ElseIf Target.Value = "No" Then 
          'Change Cell Color to Grey 
          ' Insert Grey Color Change 
          Cell.Value = "N/A" 
         Else 
          Target.ClearContents 
          Cell.ClearContents 
          With Cell.Interior 
           .Pattern = xlNone 
           .TintAndShade = 0 
           .PatternTintAndShade = 0 
          End With 
          MsgBox "Input only Yes or No." 
         End If 
        End With 
        Application.EnableEvents = True 
    End If 
    

    End Sub

Вы можете использовать MsgBox спросить, хотят ли они значение, чтобы быть да или нет.

iResponse = MsgBox("Input only Yes or No.", vbYesNoCancel) 
Select Case iResponse 
    Case vbYes 
     Target.Value = "Yes" 
    Case vbNo 
     Target.Value = "Yes" 
    Case Else 
     'You need to turn of Events when clearing the cell 
     'So that the Worksheet_Change won't fire again 
     Application.EnableEvents = False 
     Target.ClearContents 
     Cell.ClearContents 

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