Newsgroup: it.comp.lang.visual-basic
Titolo: CreateObject

-------------------SCOPO :
Da VB devo aprire files .Doc di Microsoft Word 2000
già esistenti in una cartella.
Poichè devo interagire con essi
ho referenziato (Microsoft Word 9.0 Object Library)
Utilizzando la Sub seguente tengo traccia dei
documenti aperti.
---------------------
Private Sub Timer1_Timer()
On Error GoTo errore
    Caption = ""
    Dim MyApp As Word.Application
    Set MyApp = Application
    ReDim nome(MyApp.Documents.Count)
    For Each myDoc In MyApp.Documents
        nome(idx) = myDoc
        idx = idx + 1
    Next
    Text1 = Join(nome, vbNewLine)
    Set MyApp = Nothing
Exit Sub
errore:
    Text1 = ""
    Caption = Err.Description
End Sub
-------------------PROBLEMA:--
Se chiudo tutti i documenti, mentre il progetto è in esecuzione, aprendo
altro/i documento/i;
questi non vengono + rilevati.
In poche parole, deve rimanere aperto almeno un
documento Word.
Ho provato con :
    Set MyApp = New Application
    GetObject
    CreateObject
Niente da fare.
---------------
Ho l'impressione che venga memorizzato ID del processo Word e che una volta
chiusi tutti i documenti
al successivo riavvio (ovviamente) non avrà lo stesso ID.
--------------------
La cosa mi sembra veramente strana xchè
quando si utilizza un sistema del genere è ovvio che alla fine
dovranno essere chiusi prima i Doc Word e poi l'applicazione
che li gestisce.

 ho referenziato (Microsoft Word 9.0 Object Library)
[...]
Forse il codice seguente puo' esserti utile. Scritto in fretta, percio'
attenzione!
Option Explicit
Private WithEvents m_oWDApp As Word.Application
Private Sub Command1_Click()
  On Error GoTo ErrH
  m_oWDApp.Documents.Open Text1.Text
Ext:
  Exit Sub
ErrH:
  MsgBox Err.Description
End Sub
Private Sub Command2_Click()
  Dim lIndex  As Long
  Dim sName   As String
  With Me.List1
    lIndex = .ListIndex
    If lIndex >= 0 Then
      sName = .List(lIndex)
      m_oWDApp.Documents.Item(sName).Close wdPromptToSaveChanges
    End If
  End With
End Sub
Private Sub Form_Load()
  On Error GoTo ErrH
  Dim bCont   As Boolean
  Dim lIndex  As Long
  Text1.Text = "c:\temp\test.doc" ' o quel che vuoi.
  Command1.Caption = "Apri"
  Command2.Caption = "Chiudi"
  On Error Resume Next
  Set m_oWDApp = GetObject(Class:="Word.Application")
  bCont = Err.Number = 0
  On Error GoTo ErrH
  If bCont Then
    With m_oWDApp
      For lIndex = 1 To .Documents.Count
        Me.List1.AddItem .Documents(lIndex).Name
      Next
    End With
  Else
    On Error Resume Next
    Set m_oWDApp = New Word.Application
    bCont = Err.Number = 0
    On Error GoTo ErrH
  End If
  If bCont Then
    m_oWDApp.Visible = True
  End If
Ext:
  Exit Sub
ErrH:
  MsgBox Err.Description
End Sub
Private Sub Form_Unload( _
  ByRef Cancel As Integer)
  If Not (m_oWDApp Is Nothing) Then
    With m_oWDApp
      If .Documents.Count = 0 Then
        .Quit
      End If
    End With
    Set m_oWDApp = Nothing
  End If
End Sub
Private Sub List1_DblClick()
  Dim lIndex  As Long
  Dim sName   As String
  With Me.List1
    lIndex = .ListIndex
    If lIndex >= 0 Then
      sName = .List(lIndex)
      With m_oWDApp
        AppActivate .Documents.Item(sName) & " - " & .Name
      End With
    End If
  End With
End Sub
Private Sub m_oWDApp_DocumentBeforeClose( _
  ByVal Doc As Word.Document _
, Cancel As Boolean)
  Dim lIndex As Long
  With Me.List1
    For lIndex = 0 To .ListCount - 1
      If .List(lIndex) = Doc.Name Then
        .RemoveItem lIndex
      End If
    Next
  End With
End Sub
Private Sub m_oWDApp_DocumentBeforeSave( _
  ByVal Doc As Word.Document _
, SaveAsUI As Boolean _
  , Cancel As Boolean)
  '
End Sub
Private Sub m_oWDApp_DocumentOpen( _
  ByVal Doc As Word.Document)
  Me.List1.AddItem Doc.Name
End Sub
Private Sub m_oWDApp_NewDocument( _
  ByVal Doc As Word.Document)
  Me.List1.AddItem Doc.Name
End Sub
Private Sub m_oWDApp_Quit()
  '
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------