Управление Excel Worksheet_Change - PullRequest
0 голосов
/ 17 марта 2020

Я создал электронную таблицу, которая использует функцию Worksheet_Change и код, связанный с этим, работает очень хорошо. Я могу остановить его без необходимости, когда внутри модуля, используя Application.EnableEvents = False.

Однако, хотя я создал форму для ввода данных непосредственно в следующую доступную строку (опять же, это прекрасно работает в терминах вступления) не приводит к вычислению формул на листе (даже если автоматическое вычисление включено и повторно включено в модуле). Если я вручную помещаю курсор в строку, нажимаю клавишу F2 и просто нажимаю клавишу ввода, все запускается.

Я попытался ввести данные непосредственно в ячейки, но, конечно, функция Worksheet_Change включается снова и курсор не просто перемещается в следующую соседнюю ячейку ....

Я пытался проверить сначала для любого прямого ввода с кодом ниже, и если кажется, что пользователь не входит непосредственно в ячейка, Worksheet_Change отключена:

Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo eventhandler


            Sheets(1).Range("a1").Select
            LastCell2 = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row

    Dim intersection As Range
    Set intersection = Intersect(Target, Range("A3:F" & LastCell2))

    If intersection.Row = LastCell + 1 Then

        Exit Sub
    End If

    Application.EnableEvents = False

Приведенный выше код просто проверяет, вводятся ли данные в следующую пустую ячейку, и если это так, я хочу, чтобы он просто выходил, но это не так. не работает.

Таким образом, у меня на самом деле есть 2 проблемы:

  1. во-первых, почему эта формула не срабатывает после ввода через форму vba - я использовал INDIRECT, так как там другие макросы, которые удаляют строки, перемещая оставшиеся ячейки вверх, и это привело к уменьшению счетчика в $ A $ 3: $ A $ 500 до $ 499, а затем 498 и c - добавление выполняется в зависимости от системной даты и даты транзакции, поэтому я получаю текущую и будущую стоимость, используя стандартный оператор сумм:

= AD1- (SUMIF (INDIRECT ("$ A $ 3: $ $ 500 ")," <= "& СЕГОДНЯ (), ДВССЫЛ (" $ E $ 3: $ E $ 500 "))) + (SUMIF (ДВССЫЛ (" $ A $ 3: $ A $ 500 ")," <= "& СЕГОДНЯ ( ), КОСВЕННЫЕ ( "$ F $ 3: $ F $ 500"))) </p>

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

Это безнадежное дело, и я пытаюсь сделать здесь слишком много? Я относительно новичок в кодировании и обучаю себя, поэтому извиняюсь, если стандарт и стиль не всем по вкусу.

Заранее спасибо за любые ответы.

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