как обработать ошибку 5174 во время выполнения в Excel, если файл отсутствует в каталоге?

#vba #excel #ms-word

#vba #excel #ms-word

Вопрос:

Мне нужно проверить, присутствует ли файл в каталоге.

Если файл ОТСУТСТВУЕТ, я должен создать новый.

Но во время выполнения Excel выдает ошибку;

«Ошибка 5174 во время выполнения: ошибка, определенная приложением или объектом».

Существует ли какой-либо метод обработки исключений в VBA для обнаружения этих ошибок во время выполнения?

Как я могу преодолеть эту проблему, чтобы я мог создать файл, если он не существует?

 Dim savename, FileExt, FileName As String
Dim i, finalrow As Integer
Dim wdvar As Word.Application
Dim wrdDoc As Word.Document

Set wdvar = CreateObject("Word.Application")
wdvar.Visible = True         

FileName = Environ("UserProfile") amp; "DesktopReport.docx"
Set wrdDoc = wdvar.Documents.Open(FileName)

With wdvar
    .Visible = True
    .Activate


   .Documents.Add
  

Ответ №1:

добавьте ссылку на Microsoft Scripting Runtime и используйте Scripting.FileSystemObject. Он имеет приятную удобную функцию «FileExists ()», которую вы можете использовать для проверки, существует ли файл.

    Dim fso as new Scripting.FileSystemobject

   If (fso.FileExists(strPath)) Then
      debug.print "File Exists"
   Else
      debug.print "File Not Found"
   End If
  

Ответ №2:

Обработка ошибок может быть выполнена следующим образом:

 sub Main
Dim savename, FileExt, FileName As String
Dim i, finalrow As Integer
Dim wdvar As Word.Application
Dim wrdDoc As Word.Document

On Error GoTo Main_Error

Set wdvar = CreateObject("Word.Application")
wdvar.Visible = True         

FileName = Environ("UserProfile") amp; "DesktopReport.docx"
Set wrdDoc = wdvar.Documents.Open(FileName)

With wdvar
    .Visible = True
    .Activate


   .Documents.Add
'...
on error goto 0
exit sub
Main_error
   if err.number = 5174 then
   'you may write something here
else
   'normally a msgbox for the error 
end if
end sub
  

Дополнительно 1. если вы хотите создать файл, вы можете сделать это из обработчика ошибок или просто проверить, существует ли файл. Зависит от того, что вы хотите: -> http://www.rondebruin.nl/win/s9/win003.htm

Дополнительно 2. не используйте целые числа, а используйте long и объявляйте каждую переменную в отдельной строке, в противном случае вы объявляете их как переменные.

Ответ №3:

Лично я использую эту функцию :

 Public Function File_Exist(sFilePath As String) As Boolean
    Dim sProv As String
    On Error GoTo ErrorHandler
        sProv = Dir(sFilePath, vbDirectory)

        File_Exist = (sProv <> "")
    On Error GoTo 0
    Exit Function

ErrorHandler:
    MsgBox prompt:="Error on test file= " amp; sFilePath amp; vbCrLf amp; _
           Err.Number amp; vbCrLf amp; Err.Description
End Function
  

Где вам нужно его использовать :

 If File_Exist(Filename) Then
    Set wrdDoc = wdvar.Documents.Open(Filename)
Else
    With wdvar
        .Visible = True
        .Activate

       .Documents.Add
    End With
End If
  

Комментарии:

1. Используйте сценарии. Вместо этого FileSystemObject . у него есть хорошая функция FileExists(). Намного чище, чем при использовании старой функции Dir .

2. @JoeBourne: Конечно, но вам не нужно загружать ссылки для использования Dir , поэтому гораздо проще поделиться с другими! 😉

3. оп поздно связывает «Слово. Приложение » so может легко поздно привязать сценарий. filesystemobject также — нет реальной необходимости добавлять ссылку, но ее лениво не делать.