title: Quitting Excel using VBA causes run-time error 424
body: <p>I have been writing a VBA macro that opens a HTML document within Excel (in order to perform various calculations on it).  Excel will search for the HTML document within the current folder.  If it can't find it there it will produce a file open box where the user can browse to the location of the HTML document manually.  All good so far.  However should the user select Cancel (rather than selecting a file), I want Excel to display a message and quit.  </p>
  
  <p>The message is produced but then the code stops with the following error: </p>
  
  <blockquote>Run-time error '424': Object required.</blockquote>
  
  <p>This doesn't sound like too much hassle, but I've been running into one brick wall after another trying to nail what is causing the problem.</p>
  
  <p>The sub that just doesn't seem to work is:</p>
  
  <pre><code>Sub ExitWithoutPrompt()
  
  MsgBox "You failed to select a file, therefore Excel will now close.  Please refer to the readme file."
  Excel.Application.DisplayAlerts = False
  Excel.Application.Quit
  
  End Sub
  </code></pre>
  
  <p>I'm using MS Excel 2002, but I'm keen for the solution to work on as many variants of Excel as possible.</p>
  
  <p>Any help gratefully received as to where I am going wrong.  I'm a complete newbie by the way, so if at all possible please be long-winded with any guidance you might have for me...</p>
  
  <p>As it might be of use included below (at the risk of making this post unwieldy) are the other two subs I am using in the macro:</p>
  
  <p>First sub:</p>
  
  <pre><code>Sub Endurance()
  
  Call OpenHTML
  
  Range("G27").Value = "Category"
  Range("G28").Value = "Meat"
  Range("G29").Value = "Veg"
  Range("G30").Value = "PRP"
  Range("F27").Value = "Fleet"
  Range("E27").Value = "Consumption"
  
  Range("E32").Value = "Endurance"
  
  Range("E33").Value = "Lowest Category"
  Range("E34").Value = "Fleet"
  Range("E35").Value = "Consumption"
  
  Range("E27, F27, G27, E32").Font.Bold = True
  Range("F28").Value = WorksheetFunction.Sum(Range("E8,E9,E11,E14,E21"))
  Range("E28").Value = WorksheetFunction.Sum(Range("G8,G9,G11,G14,G21"))
  Range("F29").Value = WorksheetFunction.Sum(Range("E10,E16"))
  Range("E29").Value = WorksheetFunction.Sum(Range("G10,G16"))
  Range("F30").Value = WorksheetFunction.Sum(Range("E20,E22"))
  Range("E30").Value = WorksheetFunction.Sum(Range("G20,G22"))
  
  Columns("E:F").EntireColumn.AutoFit
  
  Range("G28:G30, E27, F27, G27, G33").Select
      With Selection
          .HorizontalAlignment = xlRight
      End With
  
  Range("E27:G30, E32:G35").Select
      Selection.Borders(xlDiagonalDown).LineStyle = xlNone
      Selection.Borders(xlDiagonalUp).LineStyle = xlNone
      With Selection.Borders(xlEdgeLeft)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With Selection.Borders(xlEdgeTop)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With Selection.Borders(xlEdgeBottom)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With Selection.Borders(xlEdgeRight)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      Selection.Borders(xlInsideVertical).LineStyle = xlNone
      Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
  
  
  Dim Endurance As Double
  Endurance = WorksheetFunction.Min(Range("F28:F30"))
  Range("G34").Value = WorksheetFunction.RoundDown(Endurance, 0)
  
  Endurance = WorksheetFunction.Min(Range("E28:E30"))
  Range("G35").Value = WorksheetFunction.RoundDown(Endurance, 0)
  
  Range("G33").Value = Endurance
  
  Dim LowCat As String
  
  LowCat = WorksheetFunction.VLookup(Endurance, Range("E28:G30"), 3, False)
  Range("G33").Value = LowCat
  
  ActiveSheet.PageSetup.PrintArea = "$A$1:$G$35"
  ActiveSheet.PageSetup.Orientation = xlLandscape
  
  Range("G36").Select
  
  If MsgBox("Print endurance statement?", vbYesNo + vbDefaultButton2, "Print endurance") = vbYes Then
      ActiveWindow.SelectedSheets.PrintOut Copies:=1
      Else
      Range("G36").Select
      End If
  
  
  End Sub
  </code></pre>
  
  <p>And the second sub:</p>
  
  <pre><code>Sub OpenHTML()
  
  On Error GoTo MissingFile
  
  Workbooks.Open FileName:=ThisWorkbook.Path &amp; "\TRICAT Endurance Summary.html"
  
  
  Exit Sub
  
  MissingFile:
  
  Dim Finfo As String
  Dim FilterIndex As Integer
  Dim Title As String
  Dim FileName As Variant
  
  ' Set up list of file filters
  Finfo = "HTML Files (*.html),*.html," &amp; _
          "All Files (*.*),*.*,"
  
  ' Display *.html by default
      FilterIndex = 1
  
  ' Set the dialog box caption
  Title = "Select TRICAT Endurance Summary"
  
  ' Get the filename
  FileName = Application.GetOpenFilename(FInfor, FilterIndex, Title)
  
  ' Handle Return info from dialog box
  If FileName = False Then
      Call ExitWithoutPrompt
      Else
      MsgBox "You selected" &amp; FileName
      Workbooks.Open FileName
  
  End If
  
  End Sub
  </code></pre>
  
  <p>If you've got this far, thanks for reading....</p>