Как предложить программе продолжить чтение других файлов CSV в папке CSV, даже если один из файлов CSV не найден? - PullRequest
0 голосов
/ 17 февраля 2020

Ячейки (i, 41) представляют местоположения файла csv, которые, как я предполагаю, есть в папке csv, и я сохранил их в своей электронной таблице. Тем не менее, некоторые из моих CSV-файлов не находятся в моей папке CSV, но все же я хочу, чтобы программа продолжала читать то, что у меня есть. К сожалению, программа останавливается с ошибкой, в которой говорится, что путь к файлу не найден в строке Set o_file = fs2.OpenTextFile. Я попытался решить проблему с помощью ошибки возобновить затем и при ошибке перейти к 0, но на этот раз это вызывает другую ошибку в строке Do Пока o_file.atendofstream <> True, которая говорит, что переменная объекта или с переменной объекта не установлена ​​ошибка, и я попытался использовать ошибку возобновить следующий снова, но это все еще не решит это.

Sub main()

call get_file_namevcap

end sub


Private Sub get_file_namevcap() 'check csv file using readdata sub


Dim i As Integer
Dim filename As String
Dim location As String
location = Me.ComboBox2
i = 2
Do While ActiveWorkbook.Sheets("IndexPTN_STI").Cells(i, 41) <> ""
      filename = location & "\" & ActiveWorkbook.Sheets("IndexPTN_STI").Cells(i, 41) 'getting csv file name eg:"Vramp_bke_2019.09.28_09.10.51.csv"
Call readdatavcap1(filename, i)

    i = i + 1
Loop
end sub

Private Sub readdatavcap1(filename As String, i As Integer)
Application.ScreenUpdating = False

Dim sl As String
Dim first As Integer
Dim second As Integer
Dim j As Long
Dim fs2 As New Scripting.FileSystemObject
Dim o_file As Scripting.TextStream
j = 2        'variable not defined at fs2


If Dir(filename) <> "" Then




Set fs2 = CreateObject("Scripting.FileSystemObject") 'FileSystemObject also called as FSO, provides an easy object based model to access computer's file system.
                                                      'o_file contains filename(csv file link)
Set o_file = fs2.OpenTextFile(filename, 1, TristateFalse) '1=Open a file for reading only. You can't write to this file. TristateFalse means u get ascii file by default
                                                          '2=ForWriting, 8= Forappending
                   'o_file contains filename(text file data)
 sl = o_file.readline 'Reads an entire line (up to, but not including, the newline character) from a TextStream file and returns the resulting string.
 On Error GoTo 0

 Do While Left(sl, 1) = "#"   'Left Function is used to extract N number of characters from a string from the left side.
 sl = o_file.readline
 Loop

 Do While o_file.atendofstream <> True 'atendofstream = Read-only property that returns True if the file pointer is at the end of a TextStream file; False if it is not.
 On Error GoTo 0

    sl = o_file.readline

    first = InStr(32, sl, ",", 1) - 15 'INSTR function returns the position of the first occurrence of a substring in a string.
On Error GoTo 0

    second = InStr(first + 2, sl, ",", 1) 'syntax of InStr( [start], string, substring, [compare] )
                                          'start sets string position for each search, string = string being search, substring= string expression searched ,
                                          'eg:InStr(1, "Tech on the Net", "t") Result: 9    'Shows that search is case-sensitive
                                          'compare= optional 1= textcompare
                                          'searching for commas in the file in this case

         If second = 0 Then
         second = Len(sl) + 1 'len=length of file string
         End If

    'Write the normal current trace
        ActiveWorkbook.Sheets("currentPTN_STI").Cells(j, 2 * i - 3) = Mid(sl, 15, first - 14)

         ' The MID function returns the specified number of characters in a text string, starting from a specified position (
       'ie. starting from a specified character number).
       'Use this function to extract a sub-string from any part of a text string. Syntax: MID(text_string, start_number, char_numbers).

        ActiveWorkbook.Sheets("currentPTN_STI").Cells(j, 2 * i - 2) = Abs(Mid(sl, first + 2, second - 2 - first)) + 0.000000000000001
    On Error GoTo 0
     End If

 j = j + 1
 Loop

 o_file.Close

end if

End Sub

1 Ответ

1 голос
/ 17 февраля 2020

Не полагайтесь на обработку ошибок для этого. Просто проверить, существует ли файл первым, а затем пропустить его, если он не существует:

' start your loop

If Dir(filenameIncludingPath) <> "" Then
  ' file was found, so open it and do what you want with it here

  ' dont forget to close it here when you are done

Else

    MsgBox "NOT FOUND: " & filenameIncludingPath

End If

' continue the loop

Имейте в виду, что On Error Resume Next следует использовать только в очень редких случаях, так как это это определенно не один из них, потому что вы не просто игнорируете одну ошибку, которая, по вашему мнению, может произойти, вы игнорируете и все другие возможные ошибки.

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