Newsgroup: it.comp.appl.access
Titolo: [Automazione] Word

Scenario:
Utilizzo dei File DOT come base per generare Schede di Taratura
prelevando i dati dal DB.
Nel Modello(DOT) ho inserito i Bookmark, che per comodità di ciclo
ho chiamato nello stesso modo dei Campi del Recordset, ciclo il tutto
e compilo con pochissime righe di Codice.
Il tutto funziona direi in modo soddisfacente.
PROBLEMA:[Protezione Modello]
Il tutto funzionava bene finchè non ho pensato di bloccare il Modello
con la funzione "Proteggi Moduli", che mi rende abilitati solo i Campi
Bookmark(credevo).
In realtà se apro il DOT via DoppioClick funziona come speravo, il Foglio
è bloccato e mi permette di scrivere solo nelle Celle relative ai Bookmark,
via Codice invece mi dice "Ciccia, il Documento è protetto".
Mi stò perdendo qualche pezzo sicuramente.....!!
Posto qualche riga di Codice al fine di chiarire meglio la cosa:
Private WithEvents wordApp As Word.Application
Private WithEvents wordDoc As Word.Document
Private Sub createWord(strDoc As String)
   'Dim wordApp As Word.Application
   'Dim wordDoc As Object
   Dim ReplSel As Boolean
   Dim fld As DAO.Field
   On Error GoTo gestErrori
   Set wordApp = GetObject(, "Word.Application")
   With wordApp
      .Visible = True
      .Activate
      .WindowState = wdWindowStateMaximize
      .ActiveWindow.WindowState = wdWindowStateMaximize
      '------------------------------------------------------------
      'Dal Demo di Marco Pizzamiglio
      ReplSel = .Options.ReplaceSelection
      .Options.ReplaceSelection = True
     '------------------------------------------------------------
      Set wordDoc = .Documents.Add(strDoc)
      wordDoc.Activate
   End With
   For Each fld In Me.RecordsetClone.Fields
      wordDoc.Bookmarks(fld.Name).Select
      wordApp.Selection.TypeText Me.Controls(fld.Name).value
   Next
   wordApp.ActiveDocument.Save
Esci:
   Exit Sub
gestErrori:
   If err.Number = 429 Then
       'se c'è stato un errore è perchè Word non era già aperto:
       'aprilo adesso
       Set wordApp = CreateObject("Word.Application")
       Resume Next
   Else
      MsgBox err.Number & "-" & err.Description
      GoTo Esci
   End If
End Sub
Grazie
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------


Ciao @Alex
la prima cosa che mi viene in mente....
Dopo aver creato il documento da modello
------------
Set wordDoc = .Documents.Add(strDoc)
      wordDoc.Activate
-------------
lo sproteggi
------------
wordApp.ActiveDocument.Unprotect "PWD"
------------
poi lo maneggi
............
..........
...........
e poi lo riptoteggi e lo salvi
-------------
wordApp.ActiveDocument.Protect 2, True, "PWD"
wordApp.ActiveDocument.Save
-------------
Ciao Giorgio

 Ciao Giorgio
Ti č venuto in mente la cosa giusta, non avevo visto l'Unprotect,
direi che č esattamente quello che serviva.
In pratica dopo averlo Sprotetto, nel ciclo di Modifica inserisco anche il
DELETE del Bookmark, cosě che quando lo riproteggo il campi rimangono
congelati ed intoccabili.
Ottimo.


Perchè dopo aver aperto un Documento da Modello, riempito
tramite Bookmark e salvato mi ritorna attiva l'applicazione Access..?
Non ci sono errori nè altri particolari problemi e non capisco perchè,
chiamo
la seguente Funzione dal Click, appena la rendo Visibile, o in ogni caso si
conclude
la Funzione mi ripassa il Focus su Access.
Non volevo usare metodi alternativi, essendo strano questo comportamento, da
quello
che ne sò dovrebbe rimanere Attivo Word, ed in primo piano.
Sbalgio qualche considerazione...?
Private Function CreaSchedaTaratura(strDOT As String, strDOC As String, mode
As Integer) As Boolean
   Dim ReplSel As Boolean
   Dim fld As DAO.Field
   On Error GoTo gestErrori
   Screen.MousePointer = 11
   Set wordApp = GetObject(, "Word.Application")
   With wordApp
      ReplSel = .Options.ReplaceSelection
      .Options.ReplaceSelection = True
      Set wordDoc = .Documents.Add(strDOT)
      Call CMB_PROTECT
      .WindowState = wdWindowStateMaximize
   End With
   For Each fld In Me.RecordsetClone.Fields
      If Me.Controls(fld.Name).Tag <> "EXCLUDE" Then
         If Not IsNothing(Me.Controls(fld.Name).Value) Then
            If wordDoc.Bookmarks.Exists(fld.Name) Then
               wordDoc.Bookmarks(fld.Name).Select
               wordApp.Selection.TypeText Text:=Me.Controls(fld.Name).Value
            End If
            'wordDoc.Bookmarks(fld.Name).Delete
         End If
      End If
   Next
   wordDoc.Protect 2, True ', "PWD"
   wordApp.Options.ReplaceSelection = ReplSel
   Select Case mode
      Case 1         'STAMPA MODELLO PRECOMPILATO
         wordDoc.PrintOut
         wordDoc.close wdDoNotSaveChanges
      Case 2         'APRE E SALVA SCHEDA
         wordDoc.SaveAs strDOC
         wordApp.Visible = True
         wordApp.Activate
         wordDoc.Activate
   End Select
   CreaSchedaTaratura = True
Esci:
    Screen.MousePointer = 0
   Exit Function
gestErrori:
   If err.Number = 429 Then
       'se c'è stato un errore è perchè Word non era già aperto:
       'aprilo adesso
       Set wordApp = CreateObject("Word.Application")
       Resume Next
   Else
      MsgBox err.Number & "-" & err.Description
      GoTo Esci
   End If
End Function
