Нажатие кнопки управления циклически проходит желаемый диапазон - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь записать код, чтобы при каждом нажатии кнопки команды текущее время помещалось в первую ячейку диапазона. Затем при следующем нажатии кнопки следующая ячейка диапазона заполняется текущим временем и т. Д. Я не могу понять, как циклически проходить нужный диапазон и помещать значение времени в эту ячейку при каждом нажатии кнопки.

У меня есть базовый двойной цикл For, который проходит через весь диапазон, который я хочу, и заполняет все ячейкитекущее время сразу. Я хочу, чтобы только одна ячейка заполнялась за раз с текущим временем при каждом нажатии кнопки, и я не могу понять, как на всю жизнь.

код до сих пор:

Private Sub CommandButton1_Click()

Dim i As Integer, j As Integer

For i = 6 To 115
    For j = 3 To 5
        Cells(i, j).Value = Time
    Next j
Next i


End Sub

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Я так понимаю

Private Sub CommandButton1_Click()

    Dim rg As Range
    Set rg = Range("C6:E115")

    Dim sngCell As Range
    For Each sngCell In rg
        If Len(sngCell.Value) = 0 Then
            sngCell.Value = Time
            Exit For
        End If
    Next

End Sub

Обновление :

Это решение должно быть быстрее, но я думаю, что оно не будет заметно.

  Private Sub CommandButton1_Click()

    Dim rg As Range
    Set rg = Union(Range("C5"), Range("C6:E115"))

    Dim nextCell As Range
    Set nextCell = rg.Find("")
    If Not nextCell Is Nothing And nextCell.Address <> "$C$5" Then
        nextCell.Value = Time
    End If

End Sub
0 голосов
/ 06 ноября 2019

Это работает, если какое-либо значение применяется в любой ячейке ниже строки 114

Private Sub CommandButton1_Click()
    On Error Resume Next
    [C6:E115].SpecialCells(xlCellTypeBlanks).Cells(1).Value = Time
    On Error GoTo 0
End Sub

.. без значения ниже строки 114 это работает

Private Sub CommandButton1_Click()
    On Error GoTo weird
    [C6:E115].SpecialCells(xlCellTypeBlanks).Cells(1).Value = Time
    Exit Sub
weird:
    If [C115].End(xlUp).Row > 6 Then [C115].End(xlUp).Offset(1).Value = Time
    On Error GoTo 0
End Sub
0 голосов
/ 06 ноября 2019

это должно сработать:

Option Explicit

Private Sub CommandButton1_Click()

  Dim i As Integer, j As Integer
  Dim emptyCellFound As Boolean
  Dim c As Range

  emptyCellFound = False 'not really needed. just for clarity

  For i = 6 To 115
    For j = 3 To 5
      Set c = Cells(i, j)
      If c.Value = "" And Not emptyCellFound Then
        c.Value = Time
        emptyCellFound = True
      End If
    Next j
  Next i

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