Тема: Как узнать, открыт ли в автокаде открываемый файл?

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

Re: Как узнать, открыт ли в автокаде открываемый файл?

Public Function IsOpened(FullFileName As String) As Boolean
 Dim Docs As AcadDocuments
 Dim Doc As AcadDocument
 IsOpened = False
 Set Docs = Application.Documents
 For Each Doc In Docs
  If StrComp(FullFileName, Doc.FullName) = 0 Then
   IsOpened = True
   Exit Function
 Next
End Function

Re: Как узнать, открыт ли в автокаде открываемый файл?

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

Function ShowOpen(title As String) As String
  Dim file As String
  Dim strTmp As String
  Dim VertName As OPENFILENAME
  VertName.lStructSize = Len(VertName)
  VertName.hwndOwner = ThisDrawing.HWND
  VertName.lpstrFilter = "AutoCAD drawings (*.dwg)" + _
  Chr$(0) + "*.dwg" + Chr$(0)
  VertName.lpstrFile = Space$(254)
  VertName.nMaxFile = 255
  VertName.lpstrFileTitle = Space$(254)
  VertName.nMaxFileTitle = 255
  VertName.lpstrInitialDir = CurDir
  VertName.lpstrTitle = title
  VertName.flags = 0
  If GetOpenFileName(VertName) Then
    strTmp = (Trim(VertName.lpstrFile))
    file = Mid(strTmp, 1, Len(strTmp) - 1)
    If Not IsOpened(file) Then
        ShowOpen = file
        Else: MsgBox "файл уже открыт!"
    End If
  End If
End Function

Re: Как узнать, открыт ли в автокаде открываемый файл?

Не знаю в чём тут дело но строка:

ShowOpen = file

должна быть написана так:

file=ShowOpen

Re: Как узнать, открыт ли в автокаде открываемый файл?

Я бы проверку на ужеоткрытость вынес за рамки этой диалоговой процедуры
потому как не видно что делаете дальше...
у меня сей код работает великолепно.
только я его уже слегка модифицировал: функция возвращает ссылку на документ если он открыт или Nothing если не открыт.
и дальше если надо возиться с документом - сразу получаю к нему доступ или открываю например вот так:

Set MainDoc = IsOpened(FName)
 If MainDoc Is Nothing Then
  Set MainDoc = ThisDrawing.Application.Documents.Open(FName, True)
 End If
Public Function IsOpened(FullFileName As String) As AcadDocument
 Dim Docs As AcadDocuments
 Dim Doc As AcadDocument
 Set IsOpened = Nothing
 Set Docs = Application.Documents
 For Each Doc In Docs
  If StrComp(FullFileName, Doc.FullName) = 0 Then
   Set IsOpened = Doc
   Exit Function
  End If
 Next
End Function

Re: Как узнать, открыт ли в автокаде открываемый файл?

2 Миша: у него все правильно было написано: функции передается имя файла, которая она вернет потом в вызываемую функцию...