VBA Как мне запустить только 1 из 3 подводных лодок? - PullRequest
0 голосов
/ 02 июля 2019

В настоящее время у меня есть 3 текстовых поля для ввода данных пользователем, пользователь может ввести любое из текстовых полей, а остальные 2 заполнят. Однако, когда запускается первая подпрограмма, вторая или третья не должны запускаться, когда вторая запускается первой, а третья не должна запускаться и т. Д. Я сократил коды для ввода фиксированных значений, поскольку действительные коды требуют открытия нескольких других файлов, которые очень длинный.

С текущим кодом, он работает только без сообщений об ошибках, появляющихся, когда вы чувствуете последнее из текстового поля (он же 3-й подпункт).

Private Sub tbA_AfterUpdate()
    'If user enters text, run this code
    If tbA Is Nothing Then
        tbA = ""
    Elseif tbA.TextLength > 0 Then
        tbB = "NA"
        tbC = "NA"
    End If
End Sub

'the problem starts here if user inputs into tbA, this code still runs
'prompting an error message
Private Sub tbB_AfterUpdate()
    'If user enters text, run this code
    If tbB Is Nothing Then
        tbB = ""
    Elseif tbB.TextLength > 0 Then
        tbA = "NA"
        tbC = "NA"
    End If
End Sub

Private Sub tbC_AfterUpdate()
    'If user enters text, run this code
    If tbC Is Nothing Then
        tbC = ""
    Elseif tbC.TextLength > 0 Then
        tbA = "NA"
        tbB = "NA"
    End If
End Sub

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Вам нужно использовать либо Public Boolean, чтобы помочь в управлении выполнением ваших подпрограмм, либо другой метод - сохранить значение в ячейке и использовать его в качестве ссылки в качестве контроллера.Приведенный ниже код не тестируется, но должен дать вам принцип:

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

Public bFlag As Boolean

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

Private Sub tbA_AfterUpdate()
    If bFlag = False Then
    'If user enters text, run this code
    If tbA Is Nothing Then
        tbA = ""
    ElseIf tbA.TextLength > 0 Then
        tbB = "NA"
        tbC = "NA"
    End If
    'set bool to true
    bFlag = True
    End If
End Sub

'the problem starts here if user inputs into tbA, this code still runs
'prompting an error message
Private Sub tbB_AfterUpdate()
    If bFlag = False Then
    'If user enters text, run this code
    If tbB Is Nothing Then
        tbB = ""
    ElseIf tbB.TextLength > 0 Then
        tbA = "NA"
        tbC = "NA"
    End If
    'set bool to true
    bFlag = True
    End If
End Sub

Private Sub tbC_AfterUpdate()
    If bFlag = False Then
    'If user enters text, run this code
    If tbC Is Nothing Then
        tbC = ""
    ElseIf tbC.TextLength > 0 Then
        tbA = "NA"
        tbB = "NA"
    End If
    'set bool to true
    bFlag = True
    End If
End Sub
0 голосов
/ 02 июля 2019

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

 Private Sub tbA_AfterUpdate()
    'If user enters text, run this code
     If tbA Is Nothing Then
        tbA = ""
     Elseif tbA.TextLength > 0 Then
        tbB = "NA"
        tbC = "NA"
        tbBupdatedByCode = True
        tbCupdatedByCode = True
     End If
End Sub

 'the problem starts here if user inputs into tbA, this code still runs
 'prompting an error message
 Private Sub tbB_AfterUpdate()

    If tbBupdatedByCode = False
     'If user enters text, run this code
      If tbB Is Nothing Then
      tbB = ""
    Elseif tbB.TextLength > 0 Then
      tbA = "NA"
      tbC = "NA"
    End If

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