-1

надеюсь, кто-то может помочь мне здесь ...

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

Например, если у меня есть ячейки B1, C2, B3 и A2 на листе 1. Если я введу значение в одну из этих ячеек и нажму клавишу ввода, то же самое значение появится на ... скажем, ячейка A2 на листе 2. И обратно на лист 1, после того, как я нажму клавишу ввода после того, как значение введено в одну из 4 ячеек, оно исчезнет, и я жду ввода следующего значения в любую из этих 4 ячеек. Таким образом, последовательность ... введите значение в одну из 4 ячеек на листе 1, оно автоматически регистрируется на листе 2 A2. Следующее значение на листе 1 попадет в журнал на листе 2 A3, и оно будет идти вниз по строке на листе 2 ... каждый раз, когда я нажимаю клавишу ввода (имея в виду, что значение на листе 1 одной из 4 ячеек должно быть отключено после нажмите ввод).

1 ответ1

2

Самый простой способ сделать это - поместить функцию Worksheet_Change в код рабочего листа в Sheet1 Для этого щелкните правой кнопкой мыши таблицу "Sheet1" и выберите код представления.

объяснение

Мы можем использовать что-то вроде этого для отслеживания изменений в Sheet1:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
        MsgBox ("Value changed")
    End If
End Sub

Это просто ищет изменения на листе и возвращает изменение как переменную Target .
Затем мы проверяем адрес изменения с помощью Target.Address который возвращается в форме $A$1 .
Простой оператор If затем проверяет, является ли целью какая-либо из указанных нами ячеек.

Теперь нам нужно получить значение на другой лист.
Сначала я хочу несколько переменных. Я называю их rSave (диапазон для сохранения значения) и iRow (целое число, которое захватывает последнюю использованную строку.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer, rSave As Range
Set rSave = Worksheets("Sheet2").Range("A1")
    If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
        iRow = rSave(Rows.Count).End(xlUp).Row
        rSave.Offset(iRow).Value = Target.Value
        'Target.Value = ""
    End If
End Sub

Мы устанавливаем переменную диапазона в ячейку выше, где мы хотим начать выводить числа.
Мы проверяем изменения и устанавливаем в iRow последнюю использованную строку столбца на sheet2.
Мы смещаем наш диапазон строкой из iRow и записываем наш целевой номер.

Затем мы хотим установить значение в Sheet1 обратно в ноль. Однако это вызывает изменение ячеек, которые мы отслеживаем, и в основном вызывает бесконечный цикл.
Чтобы обойти это, мы сначала проверяем, не пуста ли ячейка, прежде чем пытаться снова.

И мы, наконец, в конечном итоге с этим:

Актуальный ответ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer, rSave As Range
Set rSave = Worksheets("Sheet2").Range("A1")
    If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
        If Target.Value <> "" Then
            iRow = rSave(Rows.Count).End(xlUp).Row
            rSave.Offset(iRow).Value = Target.Value
            Target.Value = ""
        End If
    End If
End Sub

Удачи!

Обратите внимание, что это сохранит все, что введено в ячейки Sheet1. Вы можете ограничить это, просто добавив And в If Target.Value <> "" Then и проверьте наличие дополнительных критериев, таких как конкретные числа или аналогичные.

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