Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [VB6] Funzione x stampa lettere ed edtichette

    ciao a tutti :-)
    Nella mia applcazione sviluppata in VB6+Access ho un maschera di ricerca, tramite la quale riesco a fare delle selezioni sulla tabella ANAGRAFICA_CLIENTI(nome ,cognome,indirizzo,tell,..).
    Il risultato della SELECT viene visualizzato in una DATAGRID.

    Dovrei aggiungere a fianco del Datagrid un Tasto [STAMPA LETTERE] che, tramite un modello WORD predefinito del tipo <<Gentile sig. XXXX siamo lieti di comuncarle che...>>, mandi in stampa tante lettere quanto sono i record della griglia. Ogni lettere sarà intestata ad un cliente visualizzato nella griglia.
    Per cui avremo:
    Lettera 1) Gentile sig. Pippo
    Lettera 2) Gentile sig. Pluto
    Lettare n) Gentile sig. Paperino

    Una volta stampate le LETTERE, tramite un altro tasto [STAMPA ETICHETTE] dovrei stampare le ETICHETTE da incollare nelle buste, cone relativo nome, cognome, indirizzo.

    Non so come barcamenrami qualcuno potrebbe darmi qualche dritta, prima che mi butti dal balcone

    Grazie a tutti

  2. #2
    Ciao.
    Sperando che non ti sia già "buttato" dal balcone , io procederei così (premetto che non ho ancora studiato il controllo Datagrid perché per le mie applicazioni io uso la ListView):

    Per le lettere:

    - crei un ciclo da ripetersi tante volte quante sono le righe della tua datagrid;
    - all'interno di questo ciclo processi una riga alla volta della Datagrid e crei una lettera Word con i dati che ti interessano e che sono indicati nella riga processata;

    Per le etichette:

    - io seguirei lo stesso procedimento di prima sfruttando ancora una volta la tua Datagrid dove però ti consiglierei di far visualizzare (se non già fatto) i dati relativi all'indirizzo e quant'altro utile.
    Prendi i dati interessati e li immetti nel documento.


    L'unico dubbio che ho è sul documento predefinito da te utilizzato.
    Non mi viene infatti in mente in questo momento come integrare il testo "fisso" con i dati "variabili". Farò ricerche e ti farò sapere.

    Al limite crei ex-novo ogni volta il documento direttamente da codice (e qui posso esserti utile perché so come fare).

    Fammi sapere.




    P.S.: ho appena visto una discussione su un argomento del genere e te la segnalo:

    http://forum.html.it/forum/showthrea...hreadid=889718

    sicuramente ti sarà utile.
    Giulio C. - Roma

  3. #3

    non mi sono ancora gettato :-)

    in effetti pensavo di utilizzare una stampa unione. Ho gà fatto il modello word che effettua la stampa unione prelevando i dati dal DB, ma non risco a capire come posso lanciarlo il documento direttamente dalla mia applicazione VB6.

  4. #4
    Meno male....


    Ti posto un mio vecchio intervento dal quale potrai trarre sicuramente qualcosa di utile:

    http://forum.html.it/forum/showthrea...=&pagenumber=2


    Segui inoltre il link che ti ho postato nel primo messaggio, perché parla proprio di stampa unione.

    Fammi sapere.

    Ari
    Giulio C. - Roma

  5. #5

    ci siamo quasi...

    Ciao Giulio C,

    grazie ai tuoi preziosi suggerimenti sono quasi riuscito a termiare questo modulo di stampa lettere ed etichette.

    tramite questo codice infatti:
    Dim objWord As Word.Application
    Set objWord = New Word.Application
    objWord.Visible = True
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open("c:\etichette.dot")
    objDoc.Activate
    objWord.Quit (False)
    Set objWord = Nothing
    riesco a lanciare in stampa le etichette o le lettere (a seconda del nome del modello che passo al metodo Open dell'oggetto Documents).

    In riferimento a:
    Al limite crei ex-novo ogni volta il documento direttamente da codice...
    Il mio obiettivo è lanciare un solo processo di stampa che contiene tutte le lettere, per quello ho pensato alla stampa unione. Se dovessi creare per ogni cliente un lettera e mandarle in stampa una alla volta, richierei di avere code di stampa lungissime (pensa se fossero 3000).

    lettere.DOT ed etichette.dot li ho creato con gli wizard di word. così facendo però mi vengono stampati tutti i record associati alla tabella CLIENTI. Io invece vorrei poter effettuare delle selezioni sulla tabella e mandare in stampa solo il contenuto del mio recordset. E' possibile fare questo?



    Grazie infinite

  6. #6
    Ciao di nuovo Marvellous.
    Lieto di esserti stato utile.

    In merito a quanto mi hai scritto nell'ultimo messaggio io credo che un buon metodo di lavoro possa consistere nel popolare la tua Datagrid (o anche una ListView) con tutti i dati che ti occorrono per la stampa.

    Poi, processando una riga alla volta, la tua applicazione prende i dati che ti occorrono nel modello di stampa direttamente dalla tua Datagrid.

    Personalmente, come ti ho già scritto, non ho ancora studiato il controllo "Datagrid". Però, per lo stesso tuo scopo, quando mi occorre effettuare delle stampe parziali di recordset, io utilizzo una ListView popolata con i criteri adottati e dalla quale prelevo tutti i dati in essa contenuti che, ovviamente, sono gli stessi che mi occorrono in fase di stampa.

    Ti preciso inoltre che, in genere, uso un database Access 2000 con tabelle indicizzate e DAO per la gestione dello stesso.

    Se posso esserti ancora utile, anche con codice di esempio, fammelo sapere.


    Giulio C. - Roma

  7. #7
    Scusami ma sono un po'

    Francamente non risco a capire come posso fare una stampa unione prendendo i dati dal datagrid/listview. Se mi potessi mandare lo stralcio di codice (anche se liferito al listview) che fa questo mestire te ne sarei molto grato.

    Anche io uso Access 2000 e DAO, mi collego con un profilo ODBC.

    Io pensando di memorizare il risultato della mia query in una tabella (Tbl_stampa_unione), creare tramite il wizard una stampaunione collegata ad essa e infine tramite VB lanciare la il file.dot. Come ti sembra la cosa?


  8. #8
    Originariamente inviato da Marvellous

    Io pensando di memorizare il risultato della mia query in una tabella (Tbl_stampa_unione), creare tramite il wizard una stampa unione collegata ad essa e infine tramite VB lanciare la il file.dot. Come ti sembra la cosa?

    Ciao di nuovo.

    Beh, la tua idea di cui sopra mi sembra francamente buona.
    Infatti credo sia un buon compromesso popolare la tua datagrid con gli stessi dati che costituiranno la tabella di "appoggio". Una volta "popolata" quest'ultima, lanci il tuo file "dot" che prenderà i dati dalla tabella.

    Fammi sapere gli sviluppi della questione perché, qualora ti occorresse ancora, ti posterò il codice di cui parlavamo.

    Giulio C. - Roma

  9. #9

    è quasi fatta...

    Dunque...
    ho creato i miei dicumenti:
    - etichette.doc (credo che IL DOT per quello che devo fare non serva)
    - lettere.doc
    I 2 documenti sono stati creati tramite wizard ed effettuano una stampa unione prelevando i dati dalla tablella Tbl_Stampa_Unione

    Dal mio programma VB:
    - credo la query
    - Riverso il risultato della query nella tabella Tbl_Stampa_Unione
    - Tramite il tasto [STAMPA ETICHETTE]mando in esecuzione il seguente codice:
    Dim objWord As Word.Application
    Set objWord = New Word.Application
    objWord.Visible = True
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open("c:\etichette.doc")
    objDoc.Activate
    objDoc.PrintOut
    objWord.Quit (False)
    Set objWord = Nothing
    e tutto funziona a meraviglia

    -Tramite il tasto [STAMPA LETTERE] mando in esecuzione il seguente codice:
    codice:
     Dim objWord As Word.Application
        Set objWord = New Word.Application
        objWord.Visible = True
        Dim objDoc As Word.Document
        Set objDoc = objWord.Documents.Open("c:\lettere.doc")
        objDoc.Activate
        With objDoc.MailMerge
            .Execute Pause:=False
        End With     objDoc.PrintOut
        objWord.Quit (False)
        Set objWord = Nothing
    a questo punto mi aspetterei che mi partissero in stampa tutte le lettere e invece mi parte solamente la lettere modello con i campi usati nella stampa unione.
    Come mai secondo te?

    Una possibile soluzione già provata è quella di levare le righe di codice:
    objDoc.PrintOut
    objWord.Quit (False)
    Set objWord = Nothing

    E lanciare la stampa direttamente da word per poi ciudere word a mano, ma mi sembra poco elegante.

    A Natale di devo un panettone

    Grazie di nuvo

  10. #10

    ancora un passo per arrivare alla meta

    ...a questo punto mi aspetterei che mi partissero in stampa tutte le lettere e invece mi parte solamente la lettere modello con i campi usati nella stampa unione...
    Ho risolto il problema mettendo il seguente codice:

    codice:
    Dim objDoc As Word.Document
        Set objDoc = objWord.Documents.Open("c:\lettere.doc")
        objDoc.Activate
        
        With ActiveDocument.MailMerge 
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                .LastRecord = wdDefaultLastRecord
            End With
            .Execute Pause:=False
        End With
    
        ActiveDocument.PrintOut
    Ora il mio problema è un altro.
    La prima volta che mando in esecuzione la procedura tutto funziona bene e mi vengono stampate in sequenza le lettere.
    Se, una volta termiata la stampa, chiudo word e ripeto la procedura di stampa lettere il programma si blocca alla riga di codice segnata in BLU e mi viene restituito il seguente errore:
    "Il computer server remoto non esiste o non è disponibile"


    Suggerimenti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.