退出Excel使用VBA导致运行时错误424

我一直在写一个VBAmacros,在Excel中打开一个HTML文档(为了对其执行各种计算)。 Excel将search当前文件夹中的HTML文档。 如果找不到,则会产生一个文件打开框,用户可以手动浏览HTML文档的位置。 迄今为止都很好。 但是,如果用户select取消(而不是select一个文件),我希望Excel显示一条消息并退出。

该消息被生成,但随后代码停止并出现以下错误:

运行时错误“424”:需要的对象。

这听起来不是太麻烦,但我已经跑到一堵又一堵的墙上,试图找出造成问题的原因。

似乎没有工作的子是:

 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 

我正在使用MS Excel 2002,但是我非常希望解决scheme可以尽可能多地处理Excel。

任何帮助感激地收到我的错在哪里。 顺便说一下,我是一个完全新手,所以如果可能的话,请随时为我提供任何指导。

因为它可能包括下面的使用(冒着使这个post很笨拙)是我在macros中使用的另外两个子:

第一个子:

 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 

而第二个子:

 Sub OpenHTML() On Error GoTo MissingFile Workbooks.Open FileName:=ThisWorkbook.Path & "\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," & _ "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" & FileName Workbooks.Open FileName End If End Sub 

如果你有这么多,感谢阅读….

将呼叫添加到ActiveWorkbook.Close ExitWithoutPrompt

 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 ActiveWorkbook.Close False End Sub 

这适用于Excel 2003下的我。

由于某种原因,调用Application.QuitActiveWorkbook.Close的顺序非常重要。 与直觉相反,至less对我来说,如果你在Application.Quit之前调用ActiveWorkbook.Close ,你仍然会得到这个错误。