VBA - 2-я + итерация нажатия отмены не оставляет за собой пустую ячейку - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь закодировать что-то, что просит вас поставить определенный лот #. Если введенный вами номер неверен, появится всплывающее окно с сообщением, чтобы повторить попытку или отменить. Если вы нажмете «Попытаться снова», он просто вернется к первому вопросу, тогда как «Отмена» сделает inputbox = «», а затем продолжит выход из подпрограммы, оставляя пустую ячейку. Проблема заключается в том, что на данный момент одна итерация ввода чего-то неправильно и нажатия отмены немедленно работает и оставляет пустую ячейку. Тем не менее, если я введу число, скажем, 33333, нажмите «Попытаться еще раз», а теперь введите «22222» (что все еще не так), а затем нажмите «Отмена» на этот раз, потому что я хочу выйти из цикла, он выходит из цикла, но остается позади «22222» вместо того, чтобы оставить ячейку пустой.

Sub InputNum()

    'input number
    Dim lotData As String

    'requests an input number to be put in
    lotData = InputBox("Scan in Lot #")

    'checks to ensure the number put in is 3 characters long
    If Len(lotData) <> 3 Then
        'error message
        Result = MsgBox("Invalid Lot # Inputed. Must be 3 Characters. Try Again?", vbOKCancel)
        'if cancel is clicked, input number is made blank and sub is exited
        If Result = vbCancel Then
            lotData = ""
            Exit Sub
        'if ok is clicked to try again, recurses to beginning of code again
        Else
            InputNum
        End If
    End If

    'input number is put into current cell
    ActiveCell.Value = lotData

End Sub

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

С помощью vbCancel вы устанавливаете lotData на "", но затем выходите из подпрограммы перед установкой значения ячейки.В другом случае вы вызываете InputNum, но затем не выходите из подпрограммы, поэтому она все равно запускает линию ActiveCell.Value = lotData.

Sub InputNum()

    'input number
    Dim lotData As String

    'requests an input number to be put in
    lotData = InputBox("Scan in Lot #")

    'checks to ensure the number put in is 3 characters long
    If Len(lotData) <> 3 Then
        'error message
        Result = MsgBox("Invalid Lot # Inputed. Must be 3 Characters. Try Again?", vbOKCancel)
        'if cancel is clicked, input number is made blank and sub is exited
        If Result <> vbOK Then
            ActiveCell.Value = ""
        Else
            InputNum
        End If
    Else
        ActiveCell.Value = lotData
    End If

End Sub
2 голосов
/ 12 июня 2019

Что-то вроде этого должно работать для вас:

Sub InputNum()

    Dim InputMsg As String  'shown message
    Dim lotData As String   'input number

    InputMsg = "Scan in Lot #"
    Do
        lotData = InputBox(InputMsg)        'ask user to enter lot number
        If Len(lotData) = 0 Then Exit Sub   'pressed cancel, exit macro
        If Len(lotData) = 3 Then Exit Do    'entered valid lot number, exit Do loop
        InputMsg = "Invalid Lot # Inputed. Must be 3 Characters." & Chr(10) & "Scan in Lot #"   'Because invalid lot number was entered, update shown message to include the error
    Loop

    'input number is put into current cell
    ActiveCell.Value = lotData

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