Kündigen Excel VBA verursacht Laufzeitfehler 424
Frage
Ich habe einen VBA-Makro geschrieben, das ein HTML-Dokument in Excel (um verschiedene Berechnungen auf sie auszuführen) öffnet. Excel wird für das HTML-Dokument im aktuellen Ordner suchen. Wenn es nicht dort finden kann, wird es eine Datei öffnet Feld erzeugen, wo der Benutzer manuell an die Stelle des HTML-Dokuments blättern. Alles war gut bis jetzt. Allerdings sollte der Benutzer auswählen, Abbrechen (anstatt eine Datei auswählen), I Excel möchte eine Nachricht anzuzeigen und zu beenden.
Die Nachricht erzeugt wird, aber dann der Code stoppt mit dem folgenden Fehler:
Laufzeitfehler ‚424‘:. Objekt erforderlich
Das klingt nicht allzu viel Aufwand, aber ich habe in eine Mauer läuft nach dem anderen zu nageln versuchen, was das Problem verursacht.
Die Unter, die nicht zu funktionieren scheint einfach sind:
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
Ich bin mit MS Excel 2002, aber ich bin daran interessiert, die Lösung auf, so viele Varianten von Excel wie möglich zu arbeiten.
Jede Hilfe erhielt dankbar darüber, wo ich falsch werde. Ich bin ein kompletter Neuling von der Art und Weise, so dass, wenn überhaupt möglich, bitte langatmige mit jeder Anleitung, die Sie für mich haben könnten ...
Wie es von Nutzen sein könnte unten enthalten (mit dem Risiko, machen diesen Beitrag unhandlich) sind die anderen beiden U-Boote ich im Makro bin mit:
Die erste Unter:
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
Und die zweite Unter:
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
Wenn Sie schon so weit gekommen, vielen Dank für das Lesen ....
Lösung
Anruf hinzufügen 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
Dies funktioniert für mich unter Excel 2003.
Aus irgendeinem Grund die Reihenfolge Application.Quit
und ActiveWorkbook.Close
des Aufrufs ist wichtig. Counter-intuitiv, zumindest für mich, wenn Sie ActiveWorkbook.Close
vor Application.Quit
rufen Sie noch die Störung.