Newsgroup: it.comp.lang.visual-basic
Titolo: VB aprire e chiudere Autocad

Salve a tutti.
Ho bisogno di un consiglio sulla struttura logica di questa routine.
Cerco di far interagire Visual Basic con Autocad in modo da estrarre dei
dati da 1 (o più disegni) e scriverli in una listbox.
L'applicazione si apre ed elabora correttamente la sub. Ma se chiudo
l'applicazione qualcosa nel sistema tiene aperto un'istanza di autocad o
qualcosa di simile. I files non sono accessibili perchè vincolati da
un'altra applicazione.
Credo che il mio problema dipenda dal fatto che non scarico tutte le istanze
prima di terminare la sub. Ma non trovo come fare...
Grazie a chiunque mi possa aiutare.
frank
Questa è la sub:
Private Sub Command2_Click()
    Dim AcadObj As Object
    Dim O As Object
    'Dim O As AcadPaperSpace
    Dim attribs As Variant
    Dim aname As String
        Set acadApp = autocad.Application
        Set AcadObj = autocad.Documents.Open(txtnomefile.text)
        Set Acadfile = autocad.Documents.Item(0)
        For I = 0 To Acadfile.ModelSpace.Count - 1
            Set O = Acadfile.ModelSpace.Item(I)
            If (O.EntityName = "AcDbBlockReference") Then
              If O.HasAttributes Then
                  attribs = O.GetAttributes
                  For j = LBound(attribs) To UBound(attribs)
                        testo = testo & "|" & attribs(j).TextString
                  Next j
                  List3.AddItem testo
                  testo = ""
                End If
              End If
            End If
        Next I
        Acadfile.Close
        Set AcadObj = Nothing
        acadApp.Documents.Close
End Sub

         Set Acadfile = autocad.Documents.Item(0)
queste tre variabili sono globali?
prova a dichiararle localmente dentro la tua sub.
ciao, roby.

 queste tre variabili sono globali?
Ciao!
Sono frank. (L'account aveva le impostazioni errate)
Si. Sono globali.
Ho provato a inserire queste righe nella sub:
    Dim acadApp As Autocad.AcadApplication
    Dim acadfile As Autocad.AcadDocument
    Dim AcadObj As Object
ma il problama persiste.
Come scaricare la memoria definitivamente da tutte le applicazioni aperte da
Vb?
Ciao e grazie
frank

 
alla fine della sub prova così:
set acadapp =nothing
set acadfile=nothing
set acadobj =nothing
penso comunque che in qualche altra parte del programma tieni aperto un 
riferimento alla applicazine autocad.
ciao, roby.


Ciao e grazie della tua disponibilitą.
Ho creato un nuovo progetto e ho copiato solo le sub interessate. Il
problema sussisteva.
Credo di aver risolto cercando di snellire la serie di set che avevo
copia-incollato da alcuni siti internet facendo un pasticcio sintattico. :-)
Come o pociato qui sotto e, per un file solo (per ora), funziona! Ho tolto
un riferimento a acadObj che effettivamente non serviva.
Private Sub Command1_Click()
    filevero = "C:\...........\file.dwg"
    Set acadApp = AutoCAD.Application
    Set acadfile = AutoCAD.Documents.Open(filevero)
    Label1.Caption = 0
    For I = 0 To acadfile.ModelSpace.Count - 1
        Set O = acadfile.ModelSpace.Item(I)
        If (O.EntityName = "AcDbBlockReference") Then
          If O.HasAttributes Then
                List1.AddItem O.Name
          End If
        End If
    Next I
    acadfile.Close False
    acadApp.Documents.Close
    acadApp.Quit
    Set acadfile = Nothing
    Set acadApp = Nothing
End Sub
CIao ciao!
frank


Ciao e grazie della tua disponibilitą.
Ho creato un nuovo progetto e ho copiato solo le sub interessate. Il
problema sussisteva.
Credo di aver risolto cercando di snellire la serie di set che avevo
copia-incollato da alcuni siti internet facendo un pasticcio sintattico. :-)
Come o pociato qui sotto e, per un file solo (per ora), funziona! Ho tolto
un riferimento a acadObj che effettivamente non serviva.
Private Sub Command1_Click()
    filevero = "C:\...........\file.dwg"
    Set acadApp = AutoCAD.Application
    Set acadfile = AutoCAD.Documents.Open(filevero)
    Label1.Caption = 0
    For I = 0 To acadfile.ModelSpace.Count - 1
        Set O = acadfile.ModelSpace.Item(I)
        If (O.EntityName = "AcDbBlockReference") Then
          If O.HasAttributes Then
                List1.AddItem O.Name
          End If
        End If
    Next I
