Как сказать коду пропустить блок кода, если файл не найден? - PullRequest
0 голосов
/ 21 декабря 2018

Хорошо, у меня есть код, который по сути должен собрать документы .csv вместе в одну рабочую книгу и отредактировать несколько мелких вещей.У меня есть код, который прекрасно работает, создав рабочую книгу, перетасовывая файлы из «промежуточной папки», а затем автоматически подбирая / скрывая некоторые столбцы / делая строку 1 жирным.Это работает как брелок, если доступны все 8 потенциальных файлов.Однако .csv, которые мы получаем, являются выходными данными программы Python и могут варьироваться от 1 до 8 файлов.Каждый из 8 файлов будет иметь свое собственное уникальное имя, которое будет оставаться постоянным при каждом выводе.Например: Geometry Errors ВСЕГДА будет давать вывод с именем Geometry Errors.Вывод всегда будет иметь некоторую комбинацию из 8 файлов в зависимости от найденных ошибок.

Проблема в том, что если у меня нет всех 8 файлов, что чаще всего, то код VBA не 'не работает правильно.Что он делает, это смотрит в промежуточную папку с именем «DVIEW Staging», и если он не находит файл, у меня есть строка «On Error Resume Next».См. Ниже:

Application.DisplayAlerts = False
Set newbook = Workbooks.Add
ActiveWorkbook.SaveAs Filename:=Aname & "DVIEW Outputs.xlsx"

Environ ("USERPROFILE") + "\DVIEW Staging"
On Error Resume Next

Workbooks.Open Filename:= _
        Environ("USERPROFILE") & "\Desktop\DVIEW Staging\Geometry_Errors_Table.csv"
        On Error Resume Next
    Sheets("Geometry_Errors_Table").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
        Columns("A:Z").EntireColumn.AutoFit
        Range("A:A,B:B,C:C,I:I,J:J,K:K,L:L").Select
        Selection.EntireColumn.Hidden = True
        Rows("1:1").Select
        Selection.Font.Bold = True
        Range("D1").Select
        On Error Resume Next

Workbooks.Open Filename:= _
        Environ("USERPROFILE") & "\Desktop\DVIEW Staging\Fiber_and_Splice_Relationship_Errors.csv"
        On Error Resume Next
    Sheets("Fiber_and_Splice_Relationship_E").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
        Columns("A:Z").EntireColumn.AutoFit
        Range("A:A,C:C").Select
        Selection.EntireColumn.Hidden = True
        Rows("1:1").Select
        Selection.Font.Bold = True
        Range("B1").Select
        On Error Resume Next

Поэтому, когда он не может его найти, он вместо этого запускает все команды скрытия и автозаполнения на листе CURRENT (те, которые он фактически нашел).Это означает, что если 1 лист находится в выходной папке, он может потенциально запустить autofit / hide / bold 7 раз

У меня вопрос, как заставить его заблокировать часть кода и пропуститьэто если он не может найти документ? Я хочу, чтобы блок кода, находящийся под поиском файлов, выполнялся для файла THAT или не запускался вообще.Другими словами, я не хочу, чтобы блок кода Geometry Errors скрывал 7 столбцов на листе Fiber_and_Splice_Relationship_Errors, а затем после этого запускал команды Fiber_and_Splice_Relationship_Errors (поскольку я хотел, чтобы только 2 столбца были скрыты для этого)

Мне жаль, что это так долго, я не знаю, как сделать это кратким, не объяснив всего, что он пытается сделать.

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Не проверено, но что-то подобное может сработать и, конечно, отредактировать его в соответствии с вашими потребностями.

Sub Test()
    Dim FileGeoErrors As String
    Dim FileFiberAndSplice As String
    Dim GeoErrPath As String, FiberSplicePath As String
    Set newbook = Workbooks.Add

    ActiveWorkbook.SaveAs Filename:=Aname & "DVIEW Outputs.xlsx"

    Environ ("USERPROFILE") + "\DVIEW Staging"

    FileGeoErrors = Environ("USERPROFILE") & "\Desktop\DVIEW Staging\Geometry_Errors_Table.csv"
    FileFiberAndSplice = Environ("USERPROFILE") & "\Desktop\DVIEW Staging\Fiber_and_Splice_Relationship_Errors.csv"


    Workbooks.Open Filename:=FileGeoErrors
    Sheets("Geometry_Errors_Table").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
    GeoErrPath = FileGeoErrors
    ActiveSheet.Range("ZZ125") = GeoErrPath
        If Len(GeoErrPath) > 0 Then
            Columns("A:Z").EntireColumn.AutoFit
            Range("A:A,B:B,C:C,I:I,J:J,K:K,L:L").Select
            Selection.EntireColumn.Hidden = True
            Rows("1:1").Font.Bold = True
            Range("D1").Select
        End If
    Workbooks.Open Filename:=FileFiberAndSplice
    Sheets("Fiber_and_Splice_Relationship_E").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
    FiberSplicePath = FileFiberAndSplice
    ActiveSheet.Range("ZZ125") = FiberSplicePath
        If Len(FiberSplicePath) > 0 Then
            Workbooks.Open Filename:=FileFiberAndSplice
            Sheets("Fiber_and_Splice_Relationship_E").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
            Columns("A:Z").EntireColumn.AutoFit
            Range("A:A,C:C").Select
            Selection.EntireColumn.Hidden = True
            Rows("1:1").Font.Bold = True
            Range("B1").Select
        End If

End Sub
0 голосов
/ 26 декабря 2018

Я наконец нашел ответ!Зак E указал мне правильный путь, но вот ответ, чтобы заставить его делать то, что я хотел, чтобы он делал:

If MsgBox("This macro will combine DVIEW outputs. Do you wish to continue?", vbYesNo) = vbNo Then Exit Sub

    Dim FileGeoErrors As String
    Dim FileFiberAndSplice As String
Set newbook = Workbooks.Add
ActiveWorkbook.SaveAs Filename:=Aname & "DVIEW Outputs.xlsx"

FileGeoErrors = Environ("USERPROFILE") & "\Desktop\DVIEW Staging\Geometry_Errors_Table.csv"
FileFiberAndSplice = Environ("USERPROFILE") & "\Desktop\DVIEW Staging\Fiber_and_Splice_Relationship_Errors.csv"

If Dir(FileGeoErrors) <> "" Then
Workbooks.Open Filename:=FileGeoErrors
Sheets("Geometry_Errors_Table").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
            Columns("A:Z").EntireColumn.AutoFit
            Range("A:A,B:B,C:C,I:I,J:J,K:K,L:L").Select
            Selection.EntireColumn.Hidden = True
            Rows("1:1").Select
            Selection.Font.Bold = True
            Range("D1").Select
Else: GoTo 1
End If

1:
If Dir(FileFiberAndSplice) <> "" Then
Workbooks.Open Filename:=FileFiberAndSplice
Sheets("Fiber_and_Splice_Relationship_E").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
            Columns("A:Z").EntireColumn.AutoFit
            Range("A:A,C:C").Select
            Selection.EntireColumn.Hidden = True
            Rows("1:1").Select
            Selection.Font.Bold = True
            Range("B1").Select
Else: GoTo 2
End If

2:
If Dir(FileFiberCircuits) <> "" Then
Workbooks.Open Filename:=FileFiberCircuits
Sheets("Fiber_Has_Circuits").Move After:=Workbooks("DVIEW Outputs.xlsx").Sheets(1)
            Columns("A:Z").EntireColumn.AutoFit
            Range("A:A").Select
            Selection.EntireColumn.Hidden = True
            Rows("1:1").Select
            Selection.Font.Bold = True
            Range("B1").Select
Else: GoTo 3
End If

Ключ здесь - поиск в каталоге, и если он находит файл, который выполняетблок кода.Если это не так, он переходит к следующему блоку, который пронумерован по порядку.Таким образом, он перебирает все 8 ПОТЕНЦИАЛЬНЫХ листов, запускает код, если он существует, или игнорирует его, если его нет.

0 голосов
/ 21 декабря 2018

Попробуйте следующее:

Option Explicit

Sub test()

    Dim FileName As String
    Dim Directory As String

    FileName = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value

    If Len(FileName) = 0 Then
        Exit Sub
    End If

    Directory = "C:\Users\mario\Desktop\Marios\" & FileName

    If Len(Dir(Directory)) = 0 Then
      MsgBox "File does not exist"

    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...