Salve ragazzi, probabilmente annoierò degli esperti come voi con un piccolo problema che tra l'altro si verifica in un ambiente di programmazione proprietario di un software di Office, ma credetemi, non riesco a venirne a capo e la particolarità della situazione, mi fa pensare più ad un bug del software che ad un mio errore. Scusate la presunzione, ma se avrete la pazienza di leggere quanto segue, capirete cosa intendo.
Ho creato un file che riproduce la carta intestata della mia ditta e l'ho chiamato "Intestato.doc". Naturalmente il foglio base è quasi in bianco e sono presenti solamente l'intestazione, l'indirizzo, i recapiti telefonici e telematici ed una piccola formula d'apertura che comprende la data, l'oggetto e naturalmente il nominativo del destinatario. Proprio per quest'ultimo campo, ho creato un TextBox che si riempie con i dati che provengono dal MailMerge e per far questo ho creato un piccolo modulo di ricerca in VBA con dei tasti tipo lettore DVD che mi permettono di spostarmi tra i vari record. Oltre ai tasti di spostamento, c'è un casella ti testo che mi permette di fare una ricerca rapida, inserendo anche soltanto le iniziali del cognome.
Qui si verifica il fatto strano perché non c'è verso di far funzionare la ricerca. I codici che ho utilizzato sono i seguenti:
CODICE CHE VIENE ESEGUITO ALL'APERTURA DEL DOCUMENTO:
Private Sub Document_Open()
Dim oMM As Word.MailMerge
Set oMM = ActiveDocument.MailMerge
oMM.MainDocumentType = wdFormLetters
oMM.OpenDataSource Name:="D:AccessContabilità.mdb", _
SQLStatement:="SELECT * FROM [Clienti] WHERE Città IS NOT NULL And Provincia IS NOT NULL And CAP IS NOT NULL And Cognome_o_Ragione_Sociale IS NOT NULL And Via IS NOT NULL And Numero_Civico IS NOT NULL And Titolo IS NOT NULL ORDER BY Cognome_o_Ragione_Sociale ASC ,Nome"
UserForm1.Show
End Sub
CODICE CHE VIENE ESEGUITO ALLA MODIFICA DEL TEXTBOX
Private Sub TextBox1_AfterUpdate()
Testo = TextBox1.Value
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
Cerca = ActiveDocument.MailMerge.DataSource.FindRecord(FindText:=Testo, Field:="Cognome_o_Ragione_Sociale")
End Sub
La cosa ancora più strana è però questa: se per attivare la connessione con il database di Access utilizzo il codice sopra indicato, (il primo dei due postati), inserito all'interno del documento, la ricerca non funziona, mentre tutto è OK, se per la connessione utilizzo la barra strumenti "Stampa Unione" di Word, ma non finisce qui! Se utilizzo la stampa unione in modo tradizionale, come ho già detto, la ricerca funziona, ma il bello è che la connessione al database è OK soltanto se apro il file "Intestato.doc" in maniera "manuale" e cioè utilizzano l'apposito comando del menu "File", mentre se utilizzo una macro, non mi si apre la connessione. Il codice che utilizzo per aprire il file "Intestato.doc" è semplicissimo ed è memorizzato nel modulo "Normal.dot" ed è quindi visibile a tutti i livelli ed è associato ad una icona nella barra applicazioni. Il codice è questo:
Sub Intestato()
Documents.Open FileName:="D:ModuliIntestato.doc"
End Sub
Credete che la cosa sia risolvibile in qualche modo o sarò sempre costretto ad aprire il file manualmente? D'accordo, non è che faccio una gran fatica, ma se non si riesce ad automatizzare nemmeno una semplicissima operazione di apertura file, allora i computer a che cosa servono?
Grazie per la pazienza e, spero, per la soluzione!