Newsgroup: it.comp.appl.access
Titolo: Modifica record e aggiornamento Word-Bookmarks

Salve,
Creare il documento da un modello Word ed inserire il record nei
Bookmarks è stato facile... il problema nasce nel momento in cui vado
a riaprire il file e, se nel frattempo il record è stato modificato,
riflettere queste modifiche nel documento
Private Sub ApriOfferta_Click()
Dim ObjWord As Word.Application
Dim Doc As Word.Document
Dim strPercorso As String
Dim strNomefile As Variant
strPercorso = DLookup("[PServer]", "TbServer")
strPercorso = strPercorso & DLookup("[Percorso]", "tbClienti",
"[CLI_ID] = '" & Me.OF_CLI_ID & "'")
If Len(Me.OF_NOMEDOCUMENTO) > 0 Then
    strNomefile = Me.OF_NOMEDOCUMENTO
    Set ObjWord = CreateObject("Word.application")
    Set Doc = ObjWord.Documents.Open(strNomefile)
    aggiornaBookmarks ObjWord, Doc
Else
    Set ObjWord = CreateObject("Word.application")
    Set Doc = ObjWord.Documents.Add(DLookup("[Pmod]", "TbServer") &
"ModOff.dot")
    aggiornaBookmarks ObjWord, Doc
    Doc.SaveAs strPercorso & Me.OF_ID & ".Doc"
    Me.OF_NOMEDOCUMENTO = strPercorso & Me.OF_ID & ".DOC"
End If
ObjWord.Visible = True
ObjWord.Activate
End Sub
Private Sub aggiornaBookmarks(ObjWord, Doc)
        Doc.Bookmarks("RAGSOC").Select
        'ObjWord.Selection.TypeText Me.Nominativo
        Doc.Bookmarks("INDIRIZZO").Select
        ObjWord.Selection.TypeText Nz(Me.Indirizzo, "")
        Doc.Bookmarks("CITTA").Select
        ObjWord.Selection.TypeText Nz(Me.Citta, "")
        Doc.Bookmarks("Tecnico").Select
        ObjWord.Selection.TypeText Nz(Me.OF_TECNICOINC, "")
        Doc.Bookmarks("CA").Select
        ObjWord.Selection.TypeText Nz(Me.OF_CONTATTO, "")
        Doc.Bookmarks("NOFFERTA").Select
        ObjWord.Selection.TypeText Nz(Me.OF_ID, "")
        Doc.Bookmarks("OGGETTO").Select
        ObjWord.Selection.TypeText Nz(Me.RC_DESCRIZONE)
End Sub
Praticamente:
Controllo la lunghezza di ME.OF_NOMEDOCUMENTO
se > 0 è già stato creato quindi devo solo aprirlo
ma se il record è stato modificato devo modificare i bookmark...
altrimenti 
creo un nuovo documento utilizando un modello Word
riempio i bookmarks con i dati del record
salvo il documento con Percorso\OF040001
Memorizzo il percorso e nomefile in ME.OF_DOCUMENTO
Fine
Problema:
Quando riapro il documento e cerco di aggiornare i bookmarks mi
restituisce un errore:
Errore Runtime 5941
"Il membro dell'insieme dei dati non esiste"
Qualcuno mi può aiutare?
...e quale sarebbe secondo una procedura alternativa?
Grazie a tutti e spero in un Vs aiuto!

 Grazie a tutti e spero in un Vs aiuto!
Quando fai il .select di un bookmark e poi un .typetext, il bookmark
sparisce perchè viene rimpiazzato dal testo, quindi al successivo
tentativo non lo trova e ti dà quell'errore.
Se il record è stato modificato ti conviene riaprire il modello originale,
riesportare i nuovi dati e salvarlo sovrascrivendo il vecchio documento
word già salvato, invece che modificarlo.
Oppure invece di sostituire i bookmark dovresti selezionarli, spostarti
sulla destra e poi inserire il testo, quindi senza eliminarli, per poterli
riutilizzare in seguito per ritrovare i punti in cui hai inserito i dati.
Tra le due è più semplice la prima, rifare il documento e salvarlo sopra
al vecchio.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

...

Grazie Namor!
Purtroppo ho tralasciato un punto importante nella mia richiesta
d'aiuto...
Il Documento, una volta aperto, viene editato aggiungendo del testo
libero, per cui, se sovrascrivo il vecchio documento automaticamente
cancello anche  il testo ecc ecc...
per questo ho parlato di aggiornamento Bookmarks.
Io inserisco solo la testata dell'offerta (N° Off, Cliente, Indirizzo
ecc) il resto viene redatto "a mano" dal tecnico, da qui la necessità
di aggiornare solo i dati riguardanti i Bookmarks;
se si decidesse di cambiare il tecnico incaricato di seguire l'offerta
questa modifica deve anche comparire nel documento..
potresti fare un piccolo esempio per la seconda soluzione che mi hai
consigliato? cosa significa "spostarsi sulla destra"?
se hai tempo e pazienza mi metti 2 righe di esempio? 
Oppure qualche altro consiglio? 
Si potrebbe procedere diversamente? 
Grazie cmq, sei stato gentilissimo :)
Spero di contraccambiare mmmh.. ne dubito... visto il mio livello :(

Winjb ha scritto:



Invece del wrd.Selection.Text = !nomecampo (che elimina il bookmark)
dovresti fare un wrd.Selection.InsertAfter(!nomecampo).
Quando devi modificare i dati però devi sapere anche dove finisce il testo
inserito da access, quindi dovrai avere per ciascun campo due bookmark,
es.: nome_start e nome_end
Per modificare il documento lo apri, selezioni il testo compreso tra i
bookmark nome_start e nome_end e lo sostituisci.
Per selezionare il testo tra i due bookmark guardati un po' i metodi e le
proprietà degli oggetti bookmark e selection. Ad occhio potrebbero essere
utili bookmark.start e .end per sapere dove inizia e finisce il testo da
sostituire.
In questo caso sarebbe più semplice usare dei report, che riportano i dati
sempre aggiornati, o un documento word con stampa unione. Quel metodo coi
bookmark lo si usa quando i dati non vanno più modificati, altrimenti,
come hai potuto constatare, la storia si complica.
