【问题标题】:Excel VBA Error handler cannot find file... how to skip it?Excel VBA 错误处理程序找不到文件...如何跳过它?
【发布时间】:2019-03-19 16:26:04
【问题描述】:

文件路径作为字符串从用 C# 编写的程序发送到我的下面的代码,并且我的下面的代码运行。

我下面的代码在名为“RT_CMM_Data_File_Paths.xlsx”的 Excel 工作簿的 C 列中查找不同的文件路径

当 C 列中的文件路径输入错误时,我的以下代码会引发错误。具体来说,文件扩展名被错误输入为“.xlxs”而不是“.xlsx”

我基本上不希望我的程序停止。所以我尝试制作一个错误处理程序,它将记录导致错误的文件路径,然后关闭我的宏,以便 C# 程序可以发送下一个文件路径。

但是,相反,我的代码显示一个消息框“找不到文件路径”或其他内容...当我单击确定...我的程序完成(基本上什么都不做)并关闭并且 C# 程序成功发送下一个文件路径,就像我需要的那样......我不想点击确定......我该如何解决这个问题?

Sub RT_CMM_DATA_COMPILER(Path As String)

    Dim ArrNames
    Dim wkbTemp As Workbook
    Dim Table As Workbook

    ArrNames = Array("X-Axis", "Y-Axis", "Z-Axis", "Flatness", _
        "Length-X", "Length-Y", "Length-Z", "Length_X", "Length_Y", _
        "Length_Z", "Length", "Angle", "Angle-XY", "Angle-XZ", "Angle-YX", _
        "Angle-YZ", "Angle-ZX", "Angle-ZY", "Radius", "Diameter", "Flatness", _
        "Straightness", "Parallelism", "Perpendicular", "Circularity")

    currentData_filePath = Path

    On Error GoTo ErrHandler

    Workbooks.Open Filename:=currentData_filePath
    Set wkbTemp = ActiveWorkbook


    watchFolders_list = "S:\PED (Production Engineering Department)\bla...bla...bla...\RT_CMM_Data_File_Paths.xlsx"
    Workbooks.Open Filename:=watchFolders_list
    Set watchFolders_list = ActiveWorkbook

    watchFolders_list.Activate

    lastShtRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
    Table_Path = WorksheetFunction.VLookup(Left_dataPath, ActiveSheet.Range("A2:C" & lastShtRow), 3, False)

    Workbooks.Open Filename:=Table_Path
    Set Table = ActiveWorkbook     


    Application.DisplayAlerts = False
    wkbTemp.Saved = True
    Table.SaveAs Filename:=Table_Path
    Table.Close SaveChanges:=False

    Workbooks.Close

Exit Sub

ErrHandler:

    Workbooks.Open Filename:="S:\PED (Production Engineering Department)\bla...bla...bla...\Error_Log.xlsx"

    Set ErrorLog = ActiveWorkbook
    ErrorLog.Activate
    unusedRow = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row
    Range("A" & unusedRow).Value = currentData_filePath
    Application.DisplayAlerts = False
    ErrorLog.Saved = True
    ErrorLog.Save
    Workbooks.Close

    Resume Next

End Sub

【问题讨论】:

    标签: excel vba error-handling


    【解决方案1】:

    如果您不想点击“确定”并且对风险感到满意

    ErrHandler:
    
    Application.DisplayAlerts = False       
    Application.EnableEvents = False        
    
    Workbooks.Open Filename:="S:\PED (Production Engineering Department)\bla...bla...bla...\Error_Log.xlsx"
    
    Set ErrorLog = ActiveWorkbook
    ErrorLog.Activate
    unusedRow = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row
    Range("A" & unusedRow).Value = currentData_filePath
    Application.DisplayAlerts = False
    ErrorLog.Saved = True
    ErrorLog.Save
    Workbooks.Close
    
    Application.DisableAlerts = True
    Application.EnableEvents = True
    
    Resume Next
    

    【讨论】:

    • 我认为这是我需要的...我现在正在测试它是否有效...我怀疑我需要类似“Application.EnableEvents = False”之类的东西...只是为了说清楚......我只需要“Application.DisplayAlerts = False”一次而不是两次,对吧?
    • 那不起作用...我仍然收到有关无法找到文件的消息...现在我正在尝试使用“Application.EnableEvents = False”和“Application.DisplayAlerts = False”列在“On Error GoTo ErrHandler”行之后...我认为消息在到达 ErrHandler 之前就弹出了
    • ok... 看起来像在“On Error GoTo ErrHandler”行之后添加“Application.EnableEvents = False”和“Application.DisplayAlerts = False”......我有点困惑至于当错误发生时它是否仍然会进入我的“ErrHandler”,但我认为是......我会做更多检查以确保......
    【解决方案2】:

    如果你希望你的程序永远不会停止,无论如何,你可以简单地改变错误处理的类型:

    On Error GoTo ErrHandler
    

    到这里:

    On Error Resume Next
    

    所以最终的代码将如下所示:

    Dim ArrNames
        Dim wkbTemp As Workbook
        Dim Table As Workbook
    
        ArrNames = Array("X-Axis", "Y-Axis", "Z-Axis", "Flatness", _
            "Length-X", "Length-Y", "Length-Z", "Length_X", "Length_Y", _
            "Length_Z", "Length", "Angle", "Angle-XY", "Angle-XZ", "Angle-YX", _
            "Angle-YZ", "Angle-ZX", "Angle-ZY", "Radius", "Diameter", "Flatness", _
            "Straightness", "Parallelism", "Perpendicular", "Circularity")
    
        currentData_filePath = Path
    
        On Error Resume Next
    
        Workbooks.Open Filename:=currentData_filePath
        Set wkbTemp = ActiveWorkbook
    
    
        watchFolders_list = "S:\PED (Production Engineering Department)\bla...bla...bla...\RT_CMM_Data_File_Paths.xlsx"
        Workbooks.Open Filename:=watchFolders_list
        Set watchFolders_list = ActiveWorkbook
    
        watchFolders_list.Activate
    
        lastShtRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
        Table_Path = WorksheetFunction.VLookup(Left_dataPath, ActiveSheet.Range("A2:C" & lastShtRow), 3, False)
    
        Workbooks.Open Filename:=Table_Path
        Set Table = ActiveWorkbook     
    
        'Add here somenthing to check if there were errors
    
        Application.DisplayAlerts = False
        wkbTemp.Saved = True
        Table.SaveAs Filename:=Table_Path
        Table.Close SaveChanges:=False
    
        Workbooks.Close
    
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多