Тема: Проверить открыт ли файл?

Суть дела в следующем.
VBA'шный проект открывает Word'овский файл вносит в него изменения и сохраняет в заданную директорию под другим именем, при этом не закрывая его.
Если снова запустить акадовский VBA'шный проект он проделает тоже самое и попытается сохранить открытый Word'овский документ в эту же самую директорию под тем же именем, что и первый документ.
Возникает ошибка. Как сделать проверку на то - открыт ли файл в заданной директории с заданным именем или нет?

Re: Проверить открыт ли файл?

Возникающая ошибка и может быть проверкой.

Re: Проверить открыт ли файл?

Для того, чтобы проверить существует ли файл используют API функцию GetFileAttributes(...), она возвращает 0xFFFFFFFF если файл не существует.

Re: Проверить открыт ли файл?

sub ddd()
pathcc =  "C:\ОД.doc"
On Error GoTo ErrorHandler
        
        ActiveDocument.SaveAs FileName:=pathcc, FileFormat:= _
        wdFormatDocument, LockComments:=False, Password:="",     AddToRecentFiles:= _
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
Exit Sub
ErrorHandler:   
    Select Case Err.Number 
        Case 55  
            pathcc = "C:\ОД1.doc"
    End Select
Resume Next
End Sub

Этот код не работает. Документ "C:\ОД1.doc" не создаётся.

Re: Проверить открыт ли файл?

> Mak
Попробуйте Resume (без Next).

Re: Проверить открыт ли файл?

Попробовал.
Создался ещё 1 документ с именем ОД.doc и Word завис.

Re: Проверить открыт ли файл?

После того как убрал Next, ошибка в акадовском модуле вызывающем функцию "ddd"(см. выше)
Выдал ошибку:
Run-time error '-2147023170(800706be)':
Automation error.
Нельзя открыть даже один экземпляр ОД.doc.
Вставил Next обратно.
Предыдущая моя реплика - "Попробовал.
Создался ещё 1 документ с именем ОД.doc и Word завис." - бред.

Re: Проверить открыт ли файл?

Дело в том, что Next передает упраление инструкции СЛЕДУЮЩЕЙ ЗА той котораяя сгенерировала ошибку. В данном случае после Resume Next будет будет выполняться Exit Sub. То есть понятно, почему НЕ создается новый файл.
Проверку наличия файля можно осуществить следующим способом:

Function FileExist (ByVal partcc As String) As Boolean

'Функция возвращает True, если файл существует

FileExist= (Dir$(partcc) > "")
End Function

Re: Проверить открыт ли файл?

Эта проверка не совсем то что нужно, хотя если я не прав поправьте меня.
Мне неважно существует файл или нет. Мне нужно знать открыть он в данный моментили нет.

Re: Проверить открыт ли файл?

Плюнул на всё и оставил такой код:
sub ddd()
pathcc =  "C:\ОД.doc"
On Error GoTo ErrorHandler 
ActiveDocument.SaveAs FileName:=pathcc, FileFormat:= _        wdFormatDocument, LockComments:=False, Password:="",     AddToRecentFiles:= _        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _        SaveAsAOCELetter:=False
Exit Sub
ErrorHandler:
    Select Case Err.Number
        Case 5153
        ActiveDocument.Close
        Application.Activate
        Case Else
    End Select
Resume
End Sub

Re: Проверить открыт ли файл?

Любой путь путь хорош, если он приводит к желаемому результату. Если нет задачи сохранить старый файл, и этот код работает, то почему бы и нет.

Re: Проверить открыт ли файл?

Спасибо за помощь.
Думаю, FileExist когда-нибудь пригодится.

Re: Проверить открыт ли файл?

в Excel я делаю так:
For z = 1 To Workbooks.Count
bn = Workbooks(z).Name
If bn = fNamF Then
  GoTo lbSkOpen
End If
Next
Workbooks.Open Filename:=fName
lbSkOpen:

Re: Проверить открыт ли файл?

у меня не загружаются данные с макросом Visual Baisic и выдает ошибку: Workbooks.Open Filename:=fName!проверьте данные и место нахождения файла, а сним все впорядке и имя и место нахождение он просто его не видит. Я голову сломала! Что делать? помогите!

Re: Проверить открыт ли файл?

Даша (2007-11-02 13:06:23) >
А куда и какие данные Вы пытаетесь загрузить вместе "с макросом Visual Baisic"?
При такой постановке вопроса дюже необходим код того, что Вы пытаетесь делать))

Re: Проверить открыт ли файл?

И код сильно похож на работу внутри Excel'a...

Re: Проверить открыт ли файл?

Determining if a document is open
Sub ActivateOrOpenDocument()
    Dim doc As Document
    Dim docFound As Boolean
    For Each doc In Documents
        If InStr(1, doc.Name, "sample.doc", 1) Then
            doc.Activate
            docFound = True
            Exit For
        Else
            docFound = False
        End If
    Next doc
    If docFound = False Then Documents.Open FileName:="Sample.doc"
End Sub