Search code examples
vbaexcelruntime-errorinputbox

Can't Cancel Application.Inputbox Properly


So this code works until you decide to hit Cancel or close the inputbox window with the X at which point it gives you:

Run-time error '424':

Object required

and then it highlights this part of the code in debug:

Set ranC = Application.InputBox("Select the Cal B table.", Type:=8)

I can't seem to use the zero string length string test for canceling with this application. I need to be able to close the current workbook, show a userform and exit the sub.

Here is my code: (the code works as long as you select something and don't cancel or close)

Sub popCheckVals()
Dim ranC As Range, calBC(1 To 39) As Variant, i As Integer, j As Integer, k As Integer, l As Integer
dozerCal.Hide

Set ranC = Application.InputBox("Select the Cal B table.", Type:=8)

l = 1
For j = 1 To 13
    For i = 1 To 3
        calBC(l) = ranC(j, i)
        l = l + 1
    Next
Next
 mltn = calBC(1)
 mlte = calBC(2)
 mltelev = calBC(3)
 rltn = calBC(4)
 rlte = calBC(5)
 rltelev = calBC(6)
 mrtn = calBC(10)
 mrte = calBC(11)
 mrtelev = calBC(12)
 rrtn = calBC(13)
 rrte = calBC(14)
 rrtelev = calBC(15)
 smltn = calBC(22)
 smlte = calBC(23)
 smltelev = calBC(24)
 srltn = calBC(25)
 srlte = calBC(26)
 srltelev = calBC(27)
 smrtn = calBC(31)
 smrte = calBC(32)
 smrtelev = calBC(33)
 srrtn = calBC(34)
 srrte = calBC(35)
 srrtelev = calBC(36)

    ActiveWorkbook.Close
    dozerCal.Show
End If
End Sub

Solution

  • When the user clicks the Cancel button InputBox returns False, which is not a Range object and can't be assigned to ranC. One way to handle this is to wrap this part of the code in an error handler:

        On Error Resume Next
        Set ranC = Application.InputBox("Select the Cal B table.", Type:=8)
        If Err.Number = 424 Then
            ' Handle cancel button
            Debug.Print "User cancelled"
            Exit Sub
        ElseIf Err.Number <> 0 Then
            ' Handle unexpected error
            Debug.Print "Unexpected error"
        Else
            ' Your code here
        End If
        On Error GoTo 0    ' This line could go in the else block