Da access a word

di il
13 risposte

Da access a word

Ciao a tutti,
tempo fa ho realizzato un db dal quale, tra le altre cose, compilavo un documento (modello) word.
Grazie all'aiuto della community, sono riuscito nella creazione dell'applicativo.
Nel successivo ampliamento del lavoro succede che quando i valori presi da access provengono da una casella combinata il relativo segnalibro word venga compilato con un numero (che rappresenta la posizione del valore all'interno della lista), mentre se arrivano da una casella di testo tutto va bene.
Come risolvo ???
Ringrazio finora

13 Risposte

  • Re: Da access a word

    Il valore all'interno della casella combinata è numerico. Per questo motivo Word preleva il numero che sta al suo di sotto. Devi fare in modo di includere un campo testo (per te più significativo) e dire a Word che deve prelevare il valore di testo reale (non quello estetico della casella combinata).
  • Re: Da access a word

    Ciao Osvaldo,
    riporto quanto mi suggerisci ...
    "Devi fare in modo di includere un campo testo (per te più significativo) e dire a Word che deve prelevare il valore di testo reale".
    1^ problema: come e dove includere il campo di testo ?
    2^ problema: come dire a Word di prelevare il valore di testo ?

    Grazie
  • Re: Da access a word

    Devi spiegare esattamente come avviene questo passaggio per Word.
    Esportazione di un report?
    Stampa unione?
    Occorre che descrivi tutto lo scenario dei campi per avere una visione completa del problema.
  • Re: Da access a word

    Eccomi, l'esportazione avviene mediante codice.
    Preferisco evitare i report perchè vorrei inserire un bel pò di testo e con i report non so come fare.
    Ad ogni modo ecco il codice (copiato dal web):

    Private Sub Comando74_Click()
    Dim Wrd As Word.Application, Doc As Word.Document
    Dim Rst As DAO.Recordset
    Dim Modello As String, NomeFile As String, i As Integer
    Dim Record As String, SQL As String
    Dim Tbl As String * 1
    Dim TotRiga As Currency, Totale As Currency
    Dim ReplSel As Boolean

    'Trova il nome, completo di percorso, del modello word
    '("prova.dot" nella stessa cartella del database)
    Modello = CurrentDb.Name
    Modello = Left(Modello, Len(Modello) - Len(Dir(Modello))) & "prova.dot"

    On Error Resume Next 'gestione errori step by step
    'cerca un'istanza di Word già aperta
    Set Wrd = GetObject(, "Word.Application")
    If Err.Number = 429 Then
    'se c'è stato un errore è perchè Word non era già aperto:
    'aprilo adesso
    Set Wrd = CreateObject("Word.Application")
    End If

    On Error GoTo 0 'ripristina la segnalazione degli errori

    'rendi visibile la finestra di Word:
    Wrd.Visible = True
    'attiva Word e portalo in primo piano:
    Wrd.Activate
    'abilita l'opzione "Sostituisci la selezione". Se non fosse
    'attiva, i campi modulo rimarrebbero all'interno del testo.
    ReplSel = Wrd.Options.ReplaceSelection
    Wrd.Options.ReplaceSelection = True

    'Apri un nuovo documento basato sul modello:
    Set Doc = Wrd.Documents.Add(Modello)
    'attivalo e portalo in primo piano:
    Doc.Activate

    'seleziona il bookmark del primo campo Nome cliente:

    Doc.Bookmarks("Testo01").Select

    'e sovrascrivilo con il contenuto dei campi
    'Cognome e Nome:
    Wrd.Selection.TypeText Me.Data_consegna

    Doc.Bookmarks("Testo02").Select
    Wrd.Selection.TypeText Me.Deposito

    Doc.Bookmarks("Testo03").Select
    Wrd.Selection.TypeText Me.Cognome

    Doc.Bookmarks("Testo04").Select
    Wrd.Selection.TypeText Me.Nome

    Doc.Bookmarks("Testo05").Select
    Wrd.Selection.TypeText Me.Veicolo_tipo

    Doc.Bookmarks("Testo06").Select
    Wrd.Selection.TypeText Me.Marca


    eccetera eccetera

    'avvisa l'utente che l'esportazione è terminata
    Wrd.Application.WordBasic.MsgBox "Esportazione terminata", "Esportazione dati da Access"

    End Sub

    Alcuni di questi valori sono presi da campi di testo altri tipo Marca veicolo sono presi da combo e qui casca l'asino, perchè avviene che mi indichi (per esempio) anzichè marca Audi mi mette 1.
    Con la stampa unone me la cavo ma vorrei imparare (al meglio) anche altro.
    Grazie
  • Re: Da access a word

    Azzardo una risposta, prendimi con le molle perchè io non so usare VBA.
    Da quel che immagino di capire, tu hai una maschera e da questa, tramite Clic del Pulsante74, avviene tutto quel casino che c'è scritto sotto, cioè prelevi dati da inserire in Word.
    Vado avanti a ruota libera e dico che tu dovresti prevedere nella maschera una casella di testo non associata e scriverci dentro la colonna testo che vedi nella combobox Marca, sfruttando la proprietà Column. Se la combobox Marca è numerico, vuol dire che sotto c'è presumibilmente un ID nascosta da Column(0), mentre la Column(1) è la Marca (testo) vera e propria. Prova a:
    1. Vai in visualizzazione struttura TuaMaschera
    2. Aggiungi una casella di testo che si chiamerà Casella100
    3. Dentro ci scrivi una sintassi simile a questa:
    =[Maschere]![NomeMaschera]![NomeCampoCasellaCombinata].[Column](1)
    4. Salva la struttura maschera
    5. Ritorna sul tuo codice e, in una delle tante operazioni di prelevamento testo, anzichè fare riferimento al campo Marca, dovrai prendere in considerazione Casella100.

    Ripensandoci dopo quello che ho appena scritto, molto probabilmente VBA ti permette di vedere da subito il valore di Column(1) della combobox [Marca] e penso che potresti sfruttare direttamente la sua sintassi senza scomodare l'ingresso di una nuova casella di testo nella maschera. Adatta tu la corretta sintassi in VBA.

    Ci ho provato, se non funziona, attendi la risposta di un utente esperto di VBA.
  • Re: Da access a word

    Non so quale sia il controllo combo specifico ma di solito la colonna[0] è quella legata alla Chiave primaria non utile alla visualizzazione ma utile come riferimento relazionale.
    Nel tuo caso, che devi usare il contenuto testuale, ovviamente devi esplicitare quale colonna prendere a riferimento.
    Si accede alle colonne usando la collection Column(index) come membro del controllo Combo.
    Index è un valore definito ZEROBASE quindi colonna1=index=0.
    Nel tuo caso credo sia corente pensare tu possa dover leggere la colonna2, quindi:
    TuoBookmark=Me!NomeCombo.Column(1)
  • Re: Da access a word

    Grazie delle risposte Osvaldo e Alex,
    purtroppo non risolvo in nessun modo.
    In più non riesco ad attivare column.
    Stranamente però, in una delle combo (dove ho cognome e nome del venditore) me lo seleziona correttamente mentre dagli altri no (!?).
    La soluzione suggerita da Osvaldo non riesco ad attivarla perchè abbinado una casella di controllo a una delle combo nel momento in cui setto la casella di controllo = contenuto combo mi valorizza (al solito) il numero e non il valore testuale.
    Grazie
  • Re: Da access a word

    mazda91 ha scritto:


    La soluzione suggerita da Osvaldo non riesco ad attivarla perchè abbinado una casella di controllo a una delle combo nel momento in cui setto la casella di controllo = contenuto combo mi valorizza (al solito) il numero e non il valore testuale
    Io e @Alex abbiamo ipotizzato una situazione relativamente standard. Di solito succede che:
    1a Colonna = Column(0) è il campo ID numerico
    2a Colonna = Column(1) è il campo della 2a colonna
    3a Colonna = Column(2) è il campo della 3a colonna
    Ora tu, in quale colonna hai il campo testo significativo?
    Tieni presente che, nel caso nella combobox tu vedi il testo, questo significa che la casella combinata è stata organizzata in modo che la 1aColonna (Column(0)) sia impostata a 0 cm e tu non la vedi, ma è lei a lavorare ed è lì a tutti gli effetti.
    Ti consiglio di seguire il mio suggerimento soltanto a titolo di test, ma la sintassi proposta da @Alex è certamente coerente e pertinente, quindi vale la pena sostituirla all'interno del codice VBA.
    Se ci sono ancora problemi, raccontaci le liste campi che hai incluso nel costruire le caselle combinate, tipo dati e quanti cm misura ogni colonna.
  • Re: Da access a word

    Tentando di seguire le indicazioni di Alex ho fatto così:
    sostituisco il codice che avevo e cioé

    Doc.Bookmarks("Testo02").Select
    Wrd.Selection.TypeText Me.Deposito.

    mi seleziona il campo ID invece che il testo (Deposito XYZ)

    allora se ho capito bene dovrei sostituirlo con ...

    Doc.Bookmarks("Testo02").Select
    Wrd.Selection.TypeText Me.Deposito.Column(1)

    la difficoltà sta nel fatto che non trovo il comando column quando vado a mettere il punto
    dopo Deposito access mi da solo VALUE

    Che fare ?? e sopratutto come

    Grazie
  • Re: Da access a word

    Credo sia dovuto al fatto che hai diversi errori di Codice, e viene in questi casi INIBITO l'intellisense.

    Probabilmente hai sviluppato omettendo OPTION EXPLICIT...
    Inseriscilo in cima a tutti i moduli VBA e prova un COMPILE del codice, quasi certamente dovrai lavorare parecchio per sistemare...
  • Re: Da access a word

    Ciao a tutti,
    un aggiornamento

    sono riuscito a copiare il contenuto delle caselle combinate in una casella di testo così che poi la procedura descritta prima vada a prendere da lì i dati. Ho inserito questo parte di codice:

    Private Sub CasellaCombinata97_AfterUpdate()
    Me.Testo151 = Me.CasellaCombinata97.Column(1)
    End Sub

    Ora però succede che quando voglio esportare i dati devo x forza aggiornare tutti i campi con casella combinata altrimenti non li considera, evidentemente perchè legati all'evento AfterUpdate. Secondo voi come potrei ovviare a ciò ??
    Ancora, qualora ho un campo non compilato la procedura si interrompe non ammettendo un valore Null, che dite si potrebbe bypassare ??
    Grazie fin da adesso a tutti.
  • Re: Da access a word

    Stai facendo una cosa poco utile, in tutti i casi non scrivere codice in quanto in questo caso non serve.

    Se nel controllo [Testo151] alla proprietà Origine Controllo scrivi:
    
    =CasellaCombinata97.Column(1)
    vedrai che non devi fare più nulla...
  • Re: Da access a word

    Ciao Alex,
    come volevasi dimostrare ... hai ragione. Funziona.
    Sapresti anche suggerirmi come aggirare la mancanza di un dato in uno dei campi ?
    Vale a dire se uno dei valori non è presente come posso evitare che la procedura si blocchi ??
    Oppure sarebbe possibile avvisare l'utente che manca il dato tal-dei-tali con un popup e consentirgli quindi la modifica.

    Grazie
Devi accedere o registrarti per scrivere nel forum
13 risposte