我一直在编写一个VBA宏,它在Excel中打开一个HTML文档(为了对它执行各种计算).Excel将在当前文件夹中搜索HTML文档.如果它找不到它,它将生成一个文件打开框,用户可以手动浏览到HTML文档的位置.到目前为止都很好.但是,如果用户选择取消(而不是选择文件),我希望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,但我渴望解决方案能够处理尽可能多的Excel变体.
感谢我在哪里出错了.顺便说一句,我是一个完全新手,所以如果可能的话,请为我提供任何指导,啰嗦......
因为它可能是下面使用的(有使这篇文章变得笨拙的风险)是我在宏中使用的另外两个子:
第一个子:
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.Quit
和ActiveWorkbook.Close
是很重要的.反直觉地,至少对我而言,如果你ActiveWorkbook.Close
在Application.Quit
你仍然得到错误之前打电话.