Я создал электронную таблицу, которая использует функцию 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 проблемы:
- во-первых, почему эта формула не срабатывает после ввода через форму 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>
Во-вторых, я не могу ввести данные непосредственно в электронную таблицу и уловить тот факт, что я не хочу, чтобы она что-либо делала, и просто позволяла пользователю нажимать кнопку ввода и переходить в следующую соседнюю ячейку к той, которую они только что ввели данные.
Это безнадежное дело, и я пытаюсь сделать здесь слишком много? Я относительно новичок в кодировании и обучаю себя, поэтому извиняюсь, если стандарт и стиль не всем по вкусу.
Заранее спасибо за любые ответы.