Excel VBA Обработчик ошибок не может найти файл ... как его пропустить? - PullRequest
0 голосов
/ 19 марта 2019

Путь к файлу отправляется в виде строки в мой код ниже из программы, написанной на C #, и мой код запускается ниже.

Мой код ниже ищет другой путь к файлу в столбце C книги Excel, который называется«RT_CMM_Data_File_Paths.xlsx»

Мой код ниже выдает ошибку, когда путь к файлу в столбце 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

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Если вы хотите, чтобы ваша программа никогда не останавливалась, несмотря ни на что, вы можете просто изменить тип обработки ошибок из этого:

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
0 голосов
/ 19 марта 2019

Если вы не хотите нажимать «ОК» и довольны риском

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...