#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 также — нет реальной необходимости добавлять ссылку, но ее лениво не делать.