Есть ли способ заставить работать многошаговый макрос изменения рабочего листа? - PullRequest
0 голосов
/ 17 мая 2019

Я строю простое доказательство концепции системы управления запасами.Чтобы упростить эти шаги, я использую функцию изменения событий в Excel vba с частными подписчиками на листах.Поток процесса должен выглядеть следующим образом: номер рабочего задания сканируется в ячейку I2, вызывая выбор ячейки L4.После того, как что-то введено в диапазон L4: L13, оно перейдет к следующему столбцу.Как только ячейка O4 будет изменена, она запустит другой макрос для обновления базы данных записей.Проблема заключается в том, что при изменении ячейки I2 ничего не происходит.

Я пытался создать закрытые подписки на несколько событий изменения, но это не сработало.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WorkOrder As Range
    Dim MoveTo As Range
    Dim ChangeStatus As Range
    Dim ChangeComplete As Range


    Set WorkOrder = Range("I2")
    Set MoveTo = Range("L4:L13")
    Set ChangeStatus = Range("M4:M13")
    Set ChangeComplete = Range("O4")

    If Not Application.Intersect(WorkOrder, Range(Target.Address)) _
           Is Nothing Then

                Range("L4").Select

    ElseIf Not Application.Intersect(MoveTo, Range(Target.Address)) Is Nothing Then

                Range("M4").Select

    ElseIf Not Application.Intersect(ChangeComplete, Range(Target.Address)) Is Nothing Then

        Call Module1.EditWorkOrderStatus

    End If

Range("i2").Select


End Sub

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

ОБНОВЛЕННЫЙ КОД:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WorkOrder As Range
    Dim MoveTo As Range
    Dim ChangeStatus As Range
    Dim ChangeComplete As Range


    Set WorkOrder = Range("I2")
    Set MoveTo = Range("L4:L13")
    Set ChangeStatus = Range("M4:M13")
    Set ChangeComplete = Range("O4")

    If Not Application.Intersect(WorkOrder, Target) _
           Is Nothing Then

        If WorkOrder = "" Then

            WorkOrder.Select

        Else

            Range("L4").Select

        End If

    ElseIf Not Application.Intersect(MoveTo, Target) Is Nothing Then

                Range("M4").Select

    ElseIf Not Application.Intersect(ChangeComplete, Target) Is Nothing Then

        If ChangeComplete = "" Then

        Else

        Call Module1.EditWorkOrderStatus

        Range("o4").ClearContents
        Range("i2").Select
        End If

    End If



End Sub

1 Ответ

0 голосов
/ 17 мая 2019

Вы можете попробовать:

If Not Application.Intersect(Target, Me.Range("I2")) Is Nothing Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...