vba textbox valuetext



  • vba - textbox value/text
    di Zazà (utente non iscritto) data: 13/08/2015 12:23:38

    Buongiorno a tutti... ho un problema con una textbox. Non riesco a riportare nella textbox il testo digitato (con il codice * sotto se digito il dato viene riportato correttamente in una cella della tabella in un docx. Quando esco da Word (pulsante Esci) e riapro non riesco a fare in modo che l'utilizzatore veda nella textbox quello che contiene la cella attiva nel docx. Altre info: UO è il nome assegnato alla cella. Con il codice ** in uscita salva tutto (docx e dotm). Ho creato modello apposito legato solo mio docx.
    Ne ho provate tante...pensavo che con una sub textbox_exit avrei risolto ma nulla. Grazie mille. Ciao. Tiziano
     
    *
    Private Sub TextUO_Change()
    Dim UO As Variant
    
    ActiveDocument.Tables(1).Cell(2, 1).Select
    UO = Selection
    UO = TextUO.Text
    TextUO.Text = UO
    Selection.Delete
    Selection.InsertAfter UO
    TextUO.Text = UO <- non riporta il testo inserito con Selection.InsertAfter UO
    
    End Sub
    
    **
    Private Sub Esci_Click()
        
    ActiveDocument.ActiveWindow.View.FullScreen = False
    ActiveDocument.AttachedTemplate.Save
    Application.Quit SaveChanges:=wdSaveChanges
    
    End Sub
    
    
    
    



  • di Vecchio Frac data: 13/08/2015 13:31:48

    Il codice è involuto in alcuni punti (fai assegnazioni consecutive inutili).
    Comunque così com'è funziona correttamente anche se nel commento al codice scrivi che "non riporta il testo inserito": se digito nella textbox, il dato viene riportato nella cella della tabella specificata e naturalmente lo vedo nella textbox.

    cit. "non riesco a fare in modo che l'utilizzatore veda nella textbox quello che contiene la cella attiva nel docx"
    ---> E qual è la cella attiva? quella dove c'è il cursore? in Word non c'è ActiveCell.

    Spiega meglio cosa devi fare. Allega un file col risultato da ottenere.





  • di Zazà (utente non iscritto) data: 13/08/2015 15:53:18

    Si, la cella rimane selezionata sino all'end sub. Hai ragione mi sono spiegato da cani... si, lo so che ci sono righe unitili... la pulizia la faccio alla fine ma messo così l'inserimento testo dalla textbox alla cella funziona. In VBA mi ritengo un principiante.
    Il processo: inserisco testo con la textbox (rimane nella textbox) ed esco da word con il pulsante Esci nel form (codice **). Quando riapro il file la textbox è vuota in quanto nelle proprietà Value, text e controsource non riesco a portargli il testo della cella prima di uscire da word.
    Grazie mille Vecchio Frac.
    Tiziano
    Ciao



  • di Vecchio Frac data: 13/08/2015 16:15:52

    Ma l'userform non è persistente. Cioè, non memorizza i dati inseriti dall'utente. E' il documento Word che memorizza i dati al salvataggio (btw, col codice che chiami ** , tu fai il salvataggio del template e del documento, il che ha poco senso: il template non va salvato ogni volta).
    Quando riaprirai il documento basato sul modello e aprirai la tua userform, essa sarà vuota: Word non prevede un meccanismo che collega una cella di tabella come la proprietà Rowsource o ControlSource di certi controlli in Excel. Sei tu che via codice al caricamento della userform devi popolare i controlli.
    Naturalmente, se i dati inseriti in tabella vengono salvati col modello, te li troverai ogni volta che aprirai un documento nuovo basato su modello e allora con un'istruzione simile a questa: textuo = activedocument.tables(1).cell(2,1).range.text posta nell'evento Initialize del form dovresti ritrovarti caricato il valore attuale della cella di tabella specificata nella textbox chiamata "textuo".





  • di Zazà (utente non iscritto) data: 13/08/2015 23:20:10

    Ho capito il tuo ragionamento ho provato ma sto commettendo qualche altro errore... vedi sotto. Come ti dicevo non sono esperto.
    Il salvataggio del template l'avevo inserito come prova in quanto non riuscivo nell'intento... dopo lo tolgo.

    Info sul codice sotto:
    Avvio = nome della userform. Sotto ho provato con userform e Avvio... non mi cambia il risultato.
    Lanciano il docx parte una macro AutoOPEN() con avvio.show

    passando il cursore su TextUO nel nuovo sub mi da il risultato giusto della cella ma la textbox non è = alla cella.
    Grazie ancora.
    Ciao
    Tiziano
     
    Private Sub UserForm_Initialize()
    TextUO = ActiveDocument.Tables(1).Cell(2,1).Range.Text
    End Sub



  • di Vecchio Frac data: 14/08/2015 08:59:35

    cit. "passando il cursore su TextUO nel nuovo sub mi da il risultato giusto della cella ma la textbox non è = alla cella. "
    ---> Spiega questa frase. Cosa vuol dire che la textbox non è uguale alla cella? come ti aspetti che diventi? Allega un esempio col risultato atteso.






  • di Zazà (utente non iscritto) data: 14/08/2015 10:35:20

    Porta pazienza...
    Intendo che quando eseguo il codice i vari risultati, nel codice stesso, sono corretti... es. il risultato del codice della TextUO, passandoci sopra con mouse, da come risultato il contenuto della cella ma nella textbox dentro l'userform non viene riportato.
    Spero di essere stato + chiaro.
    Grazie.
    Ciao



  • di Vecchio Frac data: 14/08/2015 10:47:44

    Ah ok!! allora hai già eseguito il codice passo passo e in debug, sostando sul nome del controllo TextUO nell'evento Initialize, ti dà il risultato corretto. Ma poi questo risultato non appare nella textbox stessa quando, al termine delle operazioni, il form viene finalmente mostrato (.Show).
    E' così?
    Siccome questo non è possibile (ho fatto anch'io delle prove e il valore della cella, assegnato alla textbox, viene mostrato correttamente nella textbox stessa quando si mostra il form), allora c'è qualcosa d'altro che resetta la textbox o impedisce la visualizzazione corretta. Magari una proprietà ControlSource errata :)
    Verifica bene le proprietà del controllo textbox (creane un altro e confrontane le proprietà).
    Alle brutte posta il codice completo sia dell'inizializzazione che del momento in cui mostri il form (.Show) all'utente.





  • di Zazà (utente non iscritto) data: 14/08/2015 11:18:17

    Si, è così... nelle mie spiegazioni tralasciavo il passo passo... era indispensabile.
    Visto che deve funzionare mi faccio una nuova textbox e provo. Come da tuo consiglio.

    e se non funziona pulisco il codice in particolare... il codice sotto che ho inserito per disabilitare la "X" di chiusura (in alto a dx) dell'userform.
    Grazie
    Ciao
     
    Private Sub UserForm_QueryClose(cancel As Integer, Closemode As Integer)
    If Closemode = 0 Then cancel = True
    End Sub



  • di Vecchio Frac data: 14/08/2015 13:34:31

    Il codice che intercetta la chiusura della form non c'entra niente con la visualizzazione del dato all'apertura della form.






  • di Zazà (utente non iscritto) data: 14/08/2015 20:00:50

    E' andata. Ho provato con una nuova textbox e alla riapertura del file riportava l'ultimo testo inserito.
    Pertanto ho pulito il codice e ho inserito una With con il codice sotto.
    Rimane una piccola anomalia di visualizzazione che non da errori al lavoro. Lancio il docx si apre l'userform e nella textUO mi trovo un "Ritorno Carrello" senza avere premuto "Invio"... dalla textUO ero uscito con Tab.
    Grazie ancora.
    L'Info della Initialize è stata determinante.
    Ciao
     
    With
    ActiveDocument.Tables(1).Cell(2,1).Range
    .delete
    .InsertAfter TextUO
    End With.



  • di Vecchio Frac data: 14/08/2015 21:57:28

    Un ritorno carrello? toglilo considerando solo i primi caratteri a sinistra della stringa tranne l'ultimo (anzi tranne gli ultimi due visto che il ritorno a capo è vbCrLf cioè due bytes)
    Comunque sai una cosa? al termine della discussione non credo di aver capito il problema nè la soluzione ^_^
    Però se ritieni di aver concluso, premi il pulsante "Risolta", grazie.





  • di Zazà (utente non iscritto) data: 14/08/2015 23:15:45

    ok, cerco di toglierlo.
    Il Lavoro consiste nel stampare con un click 6 docx in stampa unione (i dati sono nella tabella) che servono a svariati tecnici per effettuare interventi in sicurezza sulle linee elettriche. L'applicativo è formato da 10 textbox e due pulsanti (uno per cabine elettriche e uno linee) per stampare i 6 modelli.
    Ogni tecnico (sono tanti e cambiano) si copia nel suo pc l'applicativo e se lo personalizza con i propri dati (matricola, Reparto, nome e telefono). Come mio codice avevo la necessità che un tecnico potesse prendere il suo applicativo e darlo a qualsiasi altro tecnico e lo potesse personalizzare solo la prima volta; cioè il nuovo tecnico lancia l'applicativo e se vede dati non suoi nelle textbox li modifica nelle textbox e conseguentemente nella tabella... con i lanci successivi i dati nella tabella sono aggiornati e volevo che li vedesse nella textbox. Questo ultimo punto era quello che non riuscivo a fare.
    Mi preme precisarti che questo applicativo lo sto facendo solo per i miei colleghi.
    Grazie ancora.
    Flag Risolta: messo.
    Ciao
    Tiziano