Excel VBA не работает, когда данные вводятся непосредственно в ячейку - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь понять, почему код vba не работает, когда пользователь вводит что-то непосредственно в ячейку.По сути, я включил проверку данных и предоставляю пользователю набор данных, которые он может выбрать.Если пользователь просто вводит «статус» в ячейку, макрос не запускается.Вы знаете, как решить эту проблему?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("E:E"), Target)


'Doing
xOffsetColumn = 4
If ActiveCell.Value = "Doing" Then
 If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each Rng In WorkRng
        If Not VBA.IsEmpty(Rng.Value) Then
         If Rng.Offset(0, xOffsetColumn).Value = "" Then
            Rng.Offset(0, xOffsetColumn).Value = Now
            Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
         End If
        Else
            Rng.Offset(0, xOffsetColumn).ClearContents
        End If
    Next
    Application.EnableEvents = True
 End If
End If

1 Ответ

0 голосов
/ 12 февраля 2019

Два варианта ответа.

Вариант 1: Кто-то (возможно, вы) каким-то образом отключил события.Таким образом, запустите этот небольшой код VBA, чтобы включить их обратно:

Sub EnableBack
    Application.EnableEvents = True
End Sub

Вариант 2: Вы фактически вводите «Выполнение» и ожидаете, что что-то произойдет.Это не то, что делает код.Эта строка:

If ActiveCell.Value = "Doing" Then

фактически проверяет ячейку ниже целевой.Чтобы убедиться, что в ячейке «Выполнение» указана правильная ячейка, измените эту строку на:

If Target.Value = "Doing" Then

В качестве оптимальной практики рассмотрите If UCase(Target.Value) = "DOING" Then, таким образом, вы бы поймали случаи с помощью «Выполнения», "делать", "делать" и т. д.

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