Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354

    [VB2005] Interagire tra form e esportazione word

    Buon dì, vado subito al punto...

    ho un form MDI, un form figlio e devo esportare i contenuti del form figlio in un documento word precompilato.

    allora, il codice di esportazione è presente nel form figlio...e se effettuo il comando dallo stesso l'esportazione viene eseguita alla perfezione.
    Se invece richiamo il comando dal form MDI mi si apre il documento word, si compilano alcuni campi, mentre quelli che vanno a ricercare il contenuto in campi come textbox o combobox (o altri) no.

    perchè?

    ovviamente il richiamo del comando funziona...l'esecuzione di word funziona...esportare riferimenti come oRng.text = "prova" funziona...mentre oRng.text = textbox1.text no. e non riesco a capire per quale motivo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    proprio non trovo dov'è il problema...

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Folcus
    proprio non trovo dov'è il problema...
    e pensi che noi, senza conoscere nulla del tuo codice, possiamo essere in grado di trovarlo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    Allora, vediamo di mettere un pò di codice...tutto mi pare improponibile visto che sono arrivato a più di 25000righe di codice...

    nel form padre ho inserito il richiamo al comando per stampare:

    codice:
    Private Sub StampaFascicoloInformazioniToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StampaFascicoloInformazioniToolStripMenuItem.Click
            PSC.StampaFascicolo()
    End Sub
    nel form figlio ho il comando per lanciare la stampa su word così composta:

    codice:
    Public Sub StampaFascicolo()
    
            Dim oWord As Word.Application
            Dim oDoc As Word.Document
            Dim oRng As Word.Range
    
            'Start Word and open the document template.
            oWord = CreateObject("Word.Application")
            oWord.Visible = True
            oDoc = oWord.Documents.Add(Application.StartupPath & "\Fascicolo.doc")
    
            'Aggiungo il comune
            oRng = oDoc.Bookmarks.Item("Comune1").Range
            oRng.Text = Combocomune.Text
    end sub
    ora, come detto, se oRng.text lo lascio così, ossia che mi va a prendere il valore da una combobox o da una textbox presente nel form figlio non mi stampa nulla.
    se invece indico oRng.text = "Comune tal dei tali" funziona tranquillamente.

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Intanto commetti il solito e grossolano errore molto (troppo!) diffuso sul web che è quella di dichiarare

    1. la variabile per Word
    ....Dim oWord As Word.Application

    2. e poi usi CreateObject() per istanziarla:
    ....oWord = CreateObject("Word.Application")

    perchè in realtà 'mescoli' l'EarlyBinding (1) con il LateBinding (2)

    e questo provoca la creazione di 2 oggetti 'Word' (invece di uno) che ovviamente non possono dialogare tra loro.

    Leggi questo breve e conciso articolo:
    http://forum.masterdrive.it/vba-tuto...binding-46733/
    che ti aiuta a capire il concetto.

    Sarebbe ancora meglio sfruttare le Istruzioni di compilazione condizionale per evitare anche il problema che la routine non funziona più se la versione di Word sul computer dell'utente è diversa dalla tua con cui hai compilato il programma, ed è un problema sempre in agguato che può presentarsi da un momento all'altro, perchè basta aggiornare Word (o Office) ad una versione superiore, o precedente.

    Una volta sistemato il codice, sono certo al 99% che tutto funzionerà come vuoi.
    Nel caso non sia così, facci sapere e vediamo di sistemare il tutto.


  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    grazie mille per la dritta...effettivamente, essendo alla prime armi di vbnet, ho preso in prestito il primo codice che ho trovato per l'esportazione word e da lì ho elaborato...seguirò il tuo consiglio...


    tornando alla mia applicazione, il problema persiste...e non è un problema di "word".
    Mi spiego meglio, dal form padre richiamo un comando nel form figlio per generare un banalissimo messaggio (MSGBOX)...qui se imposto il titolo e il testo me li fa vedere tranquillamente, se invece li reindirizzo ad una textbox/comobox.text no.

    quindi direi che il problema risiede da altra parte.
    Sembra quasi che esegua il comando ma che i riferimenti textbox/combobox per lui siano "vuoti".

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    metto un codice di riferimento presente nel form figlio che vado a richiamare:

    se scrivo:
    codice:
    Dim Indirizzo As String
    Indirizzo = txtIndirizzo.Text
    
    MsgBox(Indirizzo , MsgBoxStyle.Information, "ATTENZIONE!")
    mi fa vedere il titolo e dove deve essere inserito "Indirizzo" non appare nulla.

    se invece scrivo
    codice:
    MsgBox("Via Tal dei Tali" , MsgBoxStyle.Information, "ATTENZIONE!")
    mi appare il messaggio perfettamente.

  8. #8
    Originariamente inviato da Folcus
    metto un codice di riferimento presente nel form figlio che vado a richiamare:

    se scrivo:
    codice:
    Dim Indirizzo As String
    Indirizzo = txtIndirizzo.Text
    
    MsgBox(Indirizzo , MsgBoxStyle.Information, "ATTENZIONE!")
    mi fa vedere il titolo e dove deve essere inserito "Indirizzo" non appare nulla.

    se invece scrivo
    codice:
    MsgBox("Via Tal dei Tali" , MsgBoxStyle.Information, "ATTENZIONE!")
    mi appare il messaggio perfettamente.
    Ciò che scrivi è chiarissimo: la variabile Indirizzo è vuota. Ora bisogna capire perchè è vuota.
    E' scontato che la textbox txtindirizzo è riempita (vero?)

    La textbox su quale form si trova? Si trova su un form diverso da quello dove esegui il comando?

    Es. ho 2 form, form1 e form2 ; nel form2 ho una textbox chiamata text_prova

    se dal form1 voglio richiamare il contenuto della text_prova dovrò fare così:

    codice:
    indirizzo = form2.text_prova.text
    Fammi sapere..

    Ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    allora, ho il form padre e il form figlio.

    sul form figlio ho la textbox (che l'utente riempie...e nel mio caso vado a riempire), e ho il comando "public sub StampaDocumento", dove mi va a generare il documento word...ma semplicemente per ora andiamo a generare il MsgBox con il contenuto della textbox.


    sul form padre vado a richiamare il comando presente sul form figlio...e mi genera la messagebox...ma "vuota".

    quindi, il comando lo trova, lo fa partire, lo esegue...ma non riesce ad associare il contenuto della textbox. E non mi da alcun errore, per lui è tutto ok.

    e qui che non riesco a capire il perchè.
    In più, se il comando "public sub StampaDocumento" lo eseguo dal form figlio, tutto va tranquillamente bene.


    PS: eventualmente domani in ufficio genero il progetto esempio e ve lo posto qui...così col codice si riesce a vedere meglio e capire...

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    eccomi. ho messo online un esempio di prova----> PROVA PROGETTO

    semplicemente, provate a andare su File-Nuovo...apre il form figlio, qui c'è una text box...compilarla a caso e poi fare File-Stampa-StampaFascicolo...e genererà 3msgbox...uno con un testo precompilato, uno con testo preso dalla textbox e associato ad una variabile e uno con il testo preso dalla textbox...

    solo il primo funziona.

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.