Newsgroup: it.comp.lang.visual-basic
Titolo: da VB a Word (o Excel)

Salve a tutti,
il mio problema e' il seguente:
in VB ho fatto un programmino, avrei necessita' di utilizzare i dati
elaborati con VB per inserirli in un documento di word (o anche excel).
Il documento contiene già del testo, io dovrei completarlo, inserendo dei
dati da VB.
E' possibile ?
Saluti Fabrizio





Ciao, Fabrizio


 


E' possibile farlo.  


 


Nel Progetto inserisci un riferimento 
a Microsoft Word  XX.XX Object Library. Per Word 
2000
il riferimento è Microsoft Word 9.0 Object Library. 
Se, poniamo, il tuo documento ha questo 


pathname "D:\Dato.doc" , e in questo 
documento 
hai inserito un campo 
"testo1", prova il 


codice seguente : 


 


Private Sub Command1_Click()


 


    Static MyWd As 
Word.Application
    Static MyWdDoc As 
Word.Document


    'Crea una nuova istanza di 
Word
    Set MyWd = New 
Word.Application
 
    'Se si vuole rendere 
visibile
    'la nuova istanza di Word
    
MyWd.Visible = True


    'Aggancia il nuovo 
documento
    'contenente i campi da 
sostituire
    Set MyWdDoc = 
MyWd.Documents.Add("D:\dato.doc")
 
    'Riempie il 
campo con il valore


    With 
MyWdDoc
        
.FormFields("testo1").Range = Text1.Text 


        
    
End With
 
    'Se si vuole vedere 
l'anteprima
    MyWdDoc.PrintPreview


 


End Sub


 


Saluti 







Ciao Vito....


 


con l'aiuto dei consigli trovati sul NG io avevo risolto lo 
stesso problema di Fabrizio così:


 


Dim myword As Object
Dim myrange As Object
Set myword = 
CreateObject("word.application")


 


myword.Documents.Open App.Path & 
"\documento.doc"
myword.Visible = True
Set myrange = 
myword.ActiveDocument.Bookmarks("segnalibro1").Range
myrange.InsertAfter 
Text1.Text
Set myword = Nothing


End Sub


 


volevo porti (ma anche a tutti gli altri) due 
quesiti:


 


1) che differenza c'è tra l'usare WORD con createobject 
e la soluzione adottata da te? Già da altri avevo intuito che fosse 
questa la soluzione da scegliere....ma perché?


2) come vedi io avevo usato i segnalibri...(PS solo 
perché non sapevo usare i campi eh eh), .....può esserci un 
vantaggio nell'uso dell'una o dell'altra soluzione?


attualmente il dubbio che avevo sui segnalibri è che 
cliccando più volte su Command1 il testo viene inserito a 
ripetizione...perché il segnalibro resta sempre....invece ho notato che 
il campo, una volta riempito, scompare.....allora ti chiedo, come posso 
verificare se un campo è pieno o vuoto, in modo da riempirlo solo se 
necessario evitando l'errore di Membro inesistente?


 


Ciao e grazie


Andy



Vito, non ho nulla contro di te, ma ti e' proprio cosi' difficile evitare di
postare in html ?
E' forse colpa di mailgate ?
Guarda cosa devo leggere sulla connessione NNTP:
Content-Type: text/html;
 charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META content=3D"MSHTML 5.00.3103.1000" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Ciao, Fabrizio</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>E' possibile farlo.  </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Nel Progetto inserisci un riferimento =
</FONT><FONT=20
face=3DArial size=3D2>a Microsoft Word&nbsp; XX.XX Object Library. Per =
Word=20
2000<BR>il riferimento =E8 Microsoft Word 9.0 Object Library. =
</FONT><FONT=20
face=3DArial size=3D2>Se, poniamo, il tuo documento ha&nbsp;questo =
</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>pathname "D:\Dato.doc" , e in questo=20
documento&nbsp;</FONT><FONT face=3DArial size=3D2>hai inserito&nbsp;un =
campo=20
"testo1",&nbsp;prova il </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>codice seguente :&nbsp;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Private Sub =
Command1_Click()</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; Static MyWd As=20
Word.Application<BR>&nbsp;&nbsp;&nbsp; Static MyWdDoc As=20
Word.Document<BR></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; 'Crea una nuova =
istanza di=20
Word<BR>&nbsp;&nbsp;&nbsp; Set MyWd =3D New=20
Word.Application<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; 'Se si vuole rendere=20
visibile<BR>&nbsp;&nbsp;&nbsp; 'la nuova istanza di =
Word<BR>&nbsp;&nbsp;&nbsp;=20
MyWd.Visible =3D True<BR></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; 'Aggancia il nuovo=20
documento<BR>&nbsp;&nbsp;&nbsp; 'contenente i campi da=20
sostituire<BR>&nbsp;&nbsp;&nbsp; Set MyWdDoc =3D=20
MyWd.Documents.Add("D:\dato.doc")<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; =
'Riempie il=20
campo con il valore</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; With=20
MyWdDoc<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
.FormFields("testo1").Range =3D Text1.Text </FONT></DIV>
<DIV><FONT face=3DArial=20
size=3D2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;=
&nbsp;=20
End With<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; 'Se si vuole vedere=20
l'anteprima<BR>&nbsp;&nbsp;&nbsp; MyWdDoc.PrintPreview</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>End Sub</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Saluti </FONT></DIV></BODY></HTML>
------=_NextPart_000_0043_01C05473.E6F17550--
Ciao
Aldo

Ciao, Aldo
Mi sono accorto troppo tardi delle impostazioni predefinite che utilizzavo
per i post sul NG.
Mi scuso di nuovo. Per  correttezza riporto l'esempio dato in risposta.
Ciao, Vito
Nel Progetto inserisci un riferimento a Microsoft Word  XX.XX Object
Library. Per Word 2000
il riferimento è Microsoft Word 9.0 Object Library. Se, poniamo, il tuo
documento ha questo
pathname "D:\Dato.doc" , e in questo documento hai inserito un campo
"testo1", prova il
codice seguente :
Private Sub Command1_Click()
    Static MyWd As Word.Application
    Static MyWdDoc As Word.Document
    'Crea una nuova istanza di Word
    Set MyWd = New Word.Application
    'Se si vuole rendere visibile
    'la nuova istanza di Word
    MyWd.Visible = True
    'Aggancia il nuovo documento
    'contenente i campi da sostituire
    Set MyWdDoc = MyWd.Documents.Add("D:\dato.doc")
    'Riempie il campo con il valore
    With MyWdDoc
        .FormFields("testo1").Range = Text1.Text
    End With
    'Se si vuole vedere l'anteprima
    MyWdDoc.PrintPreview
End Sub
-- 
Posted from 
smtp2.libero.it
 [193.70.192.52] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao Andy,
                                                        riporto la tua per
poterti rispondere,  spero, in modo più completo.
Ciao Vito....





Ciao e grazie
Andy
Riporto anche la soluzione adottata da me
Private Sub Command1_Click()
    Static MyWd As Word.Application
    Static MyWdDoc As Word.Document
    'Crea una nuova istanza di Word
    Set MyWd = New Word.Application
    'Se si vuole rendere visibile
    'la nuova istanza di Word
    MyWd.Visible = True
    'Aggancia il nuovo documento
    'contenente i campi da sostituire
    Set MyWdDoc = MyWd.Documents.Add("D:\dato.doc")
    'Riempie il campo con il valore
    With MyWdDoc
        .FormFields("testo1").Range = Text1.Text
    End With
    'Se si vuole vedere l'anteprima
    MyWdDoc.PrintPreview
End Sub
La dichiarazione
    Dim myword As Object
    Dim myrange As Object
    Set myword = CreateObject("word.application")
E' di tipo Late Binding, ovvero la "risolvi dopo" nel senso che fino a
quando non eseguirai
l'applicazione, VB ignora la natura degli oggetti myword e myrange. A
run-time, invece,
vengono eseguite le operazioni di controllo sui tipi di oggetti e il lancio
dell'applicazione
server "word.application". Solo a questo punto possono emergere degli
errori, non ultimo
quello che non hai Word installato !
    Static MyWd As Word.Application
    Static MyWdDoc As Word.Document
Permette a design-time di conoscere il tipo degli oggetti (tramite la
libreria di tipi che carichi
inserendo un riferimento a Microsoft Word Object Library ....)
Anche questa assegnazione è immediata e ti risparmia tempo ed eventuali
problemi:
    'Crea una nuova istanza di Word
    Set MyWd = New Word.Application
Se si utilizza questa istruzione
    Set MyWdDoc = MyWd.Documents.Add("D:\dato.doc")
oltre ad aprire il documento desiderato, si può anche utilizzare al posto
del documento stesso
un documento di tipo modello (.dot) che contiene la lista dei campi da
aggiungere. Questo può
essere utile quando abbiamo una circolare da personalizzare con valori
diversi con uno stesso
modello di partenza.
Per gestire la "scomparsa del campo" si può usare la ... prevenzione. Ad
esempio :
    Static MyWd As Word.Application
    Static MyWdDoc As Word.Document
    ' Inserisci la On Error
    On Error Goto ErroriWord
    .......
    .......
    .......
    Exit Sub
    ErroriWord:
    If Err.Number = 5941 Then
        ' E' l'errore del campo scomparso
        Resume Next
    End If
End Sub
Spero di essere stato utile.
Ciao, Vito
-- 
Posted from 
smtp1.libero.it
 [193.70.192.51] 






GRANDISSIMO...


provo subito


Grazie


Andy