الإقلاع عن التدخين Excel باستخدام VBA يسبب خطأ وقت التشغيل 424

StackOverflow https://stackoverflow.com/questions/401015

  •  03-07-2019
  •  | 
  •  

سؤال

ولقد تم كتابة ماكرو VBA فتح مستند HTML في اكسل (من أجل إجراء عمليات حسابية مختلفة على ذلك). سيقوم Excel البحث عن المستند HTML داخل المجلد الحالي. إذا لم تتمكن من العثور عليه هناك فإنه سوف ينتج مربع ملف مفتوح حيث يمكن للمستخدم تصفح للموقع المستند HTML يدويا. كل شيء جيد حتى الآن. ومع ذلك يجب على المستخدم حدد إلغاء (بدلا من اختيار ملف)، أريد إكسل لعرض رسالة والإقلاع عن التدخين.

ويتم إنتاج رسالة ولكن بعد ذلك يتوقف رمز الخطأ التالي:

<اقتباس فقرة> خطأ وقت التشغيل '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

وأنا باستخدام مايكروسوفت إكسل 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

وهذا يعمل بالنسبة لي تحت اكسل 2003.

لسبب ما، من اجل الدعوة Application.Quit وActiveWorkbook.Close هو المهم. مكافحة حدسي، على الأقل بالنسبة لي، إذا كنت استدعاء ActiveWorkbook.Close قبل Application.Quit كنت لا تزال تحصل على الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top