Я стремлюсь достичь следующего:

Столбец C был условно отформатирован на основе ввода данных, что если данные выходят за пределы диапазона, фон ячейки станет красным.

Я хочу принудительно вводить данные в нижней части листа через обязательное поле ввода всякий раз, когда данные были введены, и ячейка условно отформатирована красным цветом из-за данных вне диапазона.В этом примере комментарий сделан в ячейке B101. Как бы я изменил приведенный ниже код, чтобы, если B101 уже содержал текст, то комментарий был сделан на B102, а если B102 содержит текст, комментарий был сделан на B103 и так далее.

Private Sub worksheet_change(byval target as range)
If target.rows.count > 1 Or target.Columns.Count > 1 Then
  Exit Sub
End if

Dim com As String
Dim comm1 As String

Set isect = Application.Intersect(target,Range("C1:C100"))
If isect Is Nothing Then

Else

If target.DisplayFormat.Interior.Color = RGB(255,0,0) Then
   com = "Enter comment at bottom of sheet"

   Do While comm1 = ""
     comm1 = Application.InputBox(prompt:=com, Type:=2)
     On Error GoTo myloop
     If comm1 = False Then
        comm1 = ""
     End If

myloop:
   On Error GoTo -1
   Loop
   Range("B101").Value = comm1

Else
   Range("B101").value = ""
End If
End If
End Sub

1 ответ1

0

Вы можете добавить в цикл Do While:

Dim i As Long
i = 101

Do While Range("B" & i).Value <> ""
    Debug.Print Range("B" & i).Address
    i = i + 1
Loop
' Now that we're out of the loop, the next cell will be empty
Range("B" & i).Value = "Comment here"

Редактировать: Или, вы можете просто сделать Range("B101").End(xlDown).Offset(1,0).Value = "Comment Here"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .