ciao Vladimiro,
opterei per la memorizzazione delle immagini in un semplice campo testo al posto del campo allegato.
Ho provato a modifcare il codice inserendo l'oggetto shape per gestire l'immagine da unire a word, il salvataggio del file .doc ad ogni loop con il nome contenuto nel campo nominativo in una sottocartella figlia della cartella che contiene il db. Creala
se vuoi utilizzare la stessa modalità.
FullPath è il nome dell'immagine ottenuto concatenando in una query il path dell'immagine con il suo nome estratto dal componente filename ( select.... , "C:\pathImmagini" & [foto].[FileName] AS fullPath from...).
Nei miei test ho eliminato il calcolo del totale...ripristinalo nel tuo scenario.
Facci sapere.
ciao, Sandro.
Dim Wrd As Object, Doc As Object
Dim rst As DAO.Recordset
Dim Modello As String, NomeFile As String, i As Integer '<--- non mi sembra siano utilizzato se così puoi eliminarle
Dim Record As String, sql As String
Dim Tbl As String * 1
Dim TotRiga As Currency, Totale As Currency
Dim ReplSel As Boolean
Dim oWordTab As Object '<--- non mi sembra sia utilizzato se così puoi eliminarlo
Dim WdShape As Object 'Shape
Modello = CurrentDb.Name
Modello = Left(Modello, Len(Modello) - Len(Dir(Modello))) & "Anteprima_Comunicato.dot"
On Error Resume Next
Set Wrd = GetObject(, "Word.Application")
If Err.Number = 429 Then
Set Wrd = CreateObject("Word.Application")
End If
On Error GoTo 0
Wrd.Visible = True
Wrd.Activate
ReplSel = Wrd.Options.ReplaceSelection
Wrd.Options.ReplaceSelection = True
'Set Doc = Wrd.Documents.Add(Modello)
'Doc.Activate
'Doc.Bookmarks("bknome").Select
sql = "SELECT * FROM query1;" ' modificato in una query per estrarre il nome del file
Set rst = CurrentDb.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges)
Tbl = Chr$(9)
With rst
Totale = 0 '
.MoveFirst
While Not .EOF
Set Doc = Wrd.Documents.Add(Modello)
Doc.Activate
' Doc.Bookmarks("bknome").Select
'Record = !Nominativo & Tbl & _
!Foto
'Wrd.Selection.TypeText bknome & vbCrLf
'Totale = Totale + TotRiga
With Doc
.Bookmarks("Risultati").Range.insertAfter rst.Fields("Nominativo ")
On Error Resume Next ' nel caso in cui l'immagine non sia presente bypassiamo l'errore
Set WdShape = Doc.Shapes.AddPicture(FileName:=rst.Fields("fullPath"), Anchor:=Doc.Range)
With WdShape
.WrapFormat.Type = 0 ' wdWrapSquare
.Left = Wrd.InchesToPoints(3)
.LockAnchor = True
End With
On Error GoTo 0 ' rispristino la gestione degli errori
.SaveAs FileName:=CurrentProject.Path & "\doc" & rst.Fields("Nominativo") & ".doc", _
FileFormat:=0, _
AddToRecentFiles:=False
.Close SaveChanges:=False
End With
.MoveNext
Wend
End With
rst.Close: Set rst = Nothing
Wrd.Options.ReplaceSelection = ReplSel
Set WdShape = Nothing
Set Doc = Nothing
Wrd.Quit
Set Wrd = Nothing
VBA.MsgBox "esportazione terminata", , "Esportazione dati da Access"