ciao Andrea,
[...]
Ti ringrazio per il complimento circa la pazienza e la buona volontà ! E' vero, quelle non mi mancano, purtroppo mi manca la conoscenza delle basi, in particolare ho una spiccatissima ed innata avversione per i cicli !!!!!
[...]
:-)
[...]
- non tiene conto della condizione "clienti.invio = true";
[...]
secondo me si invece.
[...]
- non cicla il recordset ma si limita a creare il Pdf solo per il cliente selezionato !!!;
[...]
per come lo hai impostato devi ciclare il recordsetclone della form visto i parametri passati, ma forse ti è più facile utilizzare il recordset creato ad hoc, passando il campo del recorset, nel codice qui sotto capirai perché
[...]
- a livello di invio mail non trova l'allegato; temo poi che se anche lo trovasse, così come strutturato, il codice non sarebbe in grado di allegare a ciascun cliente il proprio messaggio personalizzato.
In buona sostanza UNA SCHIFEZZA, anche se spero che tu apprezzi almeno un po' lo sforzo profuso !
[...]
no secondo me no, la logica è giusta e ti sei fermato ad un passo dalla meta.
non trovi l'allegato perché non passi il path correttamente.
[...]
- ogni volta che faccio un invio accodo in una tabella i campi data, ID cliente, oggetto e path dell'invio fatto;
- creo una maschera basata su quella tabella che mi permetta di cercare con l'ID cliente oppure con la data oppure con l'oggetto gli invii effettuati.
Ho capito bene ?
[...]
si è esattamente quello che intendo che ti lascio sviluppare in autonomia,
Ovvia che se hai qualche difficoltà siamo qua.
Ti lascio la routine modificata che salva il doc in pdf e crea l'email.
Mi sono limitato a nominare "scolasticamente" il nome del file in pdf con il nome del cliente.
Non vedrei male nominare il file con data in formato americano concatenando nome cliente o suo id, tanto poi con la form basata sulla tabella di cui alla parte che devi sviluppare se serve il file lo individui facilmente.
Ricordati nell'automazione di word di chiudere l'istanza aperta e di distruggere le variabili oggetto, non sempre access fa il suo dovere ( con l'istanza la distruzione deve essere esplicita) nel resettare tutto a fine routine quindi diamogli una mano :-)
L'idea di utilizzare una funzione esterna per la gestione dei bookmarks è buona, non l'ho seguita perché a mio avviso il codice appare ordinato e lineare anche popolando i bookmarks nella routine esistente.
Personalizza il nome dei controlli....comando15...! ed inserisci una gestione errori.
prova la routine che segue :
Private Sub Comando15_Click()
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("SELECT * FROM clienti WHERE clienti.invio = True ", dbOpenDynaset)
Dim Wrd As Object, Doc As Object
Dim Modello As String, NomeFile As String, i As Integer
Dim Record As String, sql As String
Dim PercorsoFile As String
Dim PercorsoPdf As String
Dim strMessaggio As String
Dim strsubject As String
PercorsoFile = "\DS1515PLUS\DatiAziendali\stampa unione"
PercorsoPdf = "\DS1515PLUS\DatiAziendali\stampa unione\stampe pdf"
NomeFile = "stampa unione modello demo.dotx"
NomeDocWord = PercorsoFile & NomeFile
'NomePDF = PercorsoPdf & Trim(Me.Nome) & "prova.pdf"
strsubject = "Comunicazione"
'strFile = PercorsoPdf
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
On Error GoTo errHandler
Wrd.Visible = False
'Wrd.Activate
'ReplSel = Wrd.Options.ReplaceSelection
'Wrd.Options.ReplaceSelection = True
Do Until Rs.EOF
Set Doc = Wrd.Documents.Add(NomeDocWord)
'Doc.Activate
strMessaggio = "Gentile " & Rs.Fields("Nome") & vbNewLine
With Doc.bookmarks
.Item("nome").Range.Text = Rs.Fields("Nome")
.Item("indirizzo").Range.Text = Rs.Fields("Indirizzo")
.Item("frazione").Range.Text = Rs.Fields("Frazione")
.Item("cap").Range.Text = Rs.Fields("Cap")
.Item("città").Range.Text = Rs.Fields("Città")
.Item("mail").Range.Text = Rs.Fields("Mail")
End With
strFile = PercorsoPdf & Rs.Fields("nome")
With Doc
.saveas FileName:=strFile, _
FileFormat:=17 ' wdFormatPDF
.Close SaveChanges:=False
End With
strMessaggio = strMessaggio & "In allegato trasmettiamo la comunicazione in oggetto." & vbNewLine & "Distinti saluti" & vbNewLine & "Studio Pinco pallino."
CreateEmailWithOutlook Rs.Fields("Mail"), strsubject, strMessaggio, strFile & ".pdf"
Rs.MoveNext
Loop
'Call StampaBookmark(Doc, Wrd, "nome", Me.Nome)
'Call StampaBookmark(Doc, Wrd, "indirizzo", Me.Indirizzo)
'Call StampaBookmark(Doc, Wrd, "frazione", Me.Frazione)
'Call StampaBookmark(Doc, Wrd, "cap", Me.Cap)
'Call StampaBookmark(Doc, Wrd, "città", Me.Città)
'Call StampaBookmark(Doc, Wrd, "mail", Me.Mail)
ExiterrorHandler:
Rs.Close
Set Rs = Nothing
Set Doc = Nothing
Wrd.Quit
Set Wrd = Nothing
Exit Sub
errHandler:
With Err
MsgBox "ERR#" & .Number _
& vbNewLine & .Description _
, vbOKOnly Or vbCritical
End With
Resume ExiterrorHandler
End Sub
Ciao, Sandro.