Копировать Вставить L oop и смещение - PullRequest
2 голосов
/ 03 августа 2020

Я хочу нажать кнопку, взять значение ячейки E27 и вставить его в ячейку E35. Затем, когда я снова нажимаю на нее, я хочу, чтобы значение ячейки E27 было вставлено в ячейку E36. Затем я хочу, чтобы значение E27 было вставлено в ячейку E37

По сути, E27 постоянно меняется, и я хочу иметь возможность делать «снимки экрана», когда я хочу использовать макрос.

Это код, который у меня есть. Он вставит E27 в E35, но при повторном запуске не вставит E27 в E36 и т. Д. c.

Sub DataTrend()
Dim inRng As Range, outCell As Range, inCell As Range

Set inRng = Range("E27")
Set outCell = Range("E35")

Application.ScreenUpdating = False

For Each inCell In inRng
    outCell.Value = inCell.Value
    Set outCell = outCell.Offset(8, 0)
Next inCell

Application.ScreenUpdating = True

End Sub

1 Ответ

0 голосов
/ 03 августа 2020

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

  1. Определите место, где может быть размещен счетчик: возможно, ячейка (на скрытом листе) или настраиваемое свойство документа. Каждый раз, когда нажимается кнопка, этот счетчик увеличивается на 1, и строка в этом счетчике используется для вставки копии в.
  2. Вы можете расположить свой рабочий лист таким образом, чтобы всегда вставлялась копия E27. в следующую свободную ячейку на E37 или ниже. Это устранит необходимость в счетчике, но ограничит использование ячеек под строкой 37 в столбце E.

В вашем вопросе не указано, какую систему вы предпочитаете. В приведенном ниже коде выбирается второй. Также не требуется кнопка. Он просто записывает каждое изменение, внесенное в E27. Условие заключается в том, что он установлен в модуле кода рабочего листа, на котором вы хотите выполнить действие.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rt      As Long             ' Target row to write to
    
    With Target
        If .Address(0, 0) = "E27" Then
            Rt = Application.Max(36, Cells(Rows.Count, "E").End(xlUp).Row) + 1
            Cells(Rt, "E").Value = .Value
        End If
    End With
End Sub

Если вы предпочитаете управлять кодом с помощью кнопки, вы можете перенести суть процедуры на свою и установить это в стандартном модуле кода, как вы уже сделали.

...