+ Reply to Thread
Results 1 to 10 of 10
  1. #1
    Damiano Guest

    Leggere un valore da un campo variabile acquisito da una query.

    Compongo un testo word, con definiti una serie di bookmarks e per fare questo
    ho creato una tabella che contiene il nome del bookmark e il nome della
    variabile della tabella, da cui prendere il valore.
    Via codice con una select leggo bookmark e variabile: questa è parte del
    codice:
    ....
    Variab = !Bookmark
    doc.bookmarks(variab).select ' seleziona il bookmark

    CampoDb = eval(!Variabile)

    wrd.selection.typetext CampoDb
    ....
    Cosi facendo avevo capito che CampoDb avrebbe avuto il valore del campo
    della tabella indicato su !Variabile. Ma così non avviene.
    Come mi devo comportare?

    Grazie a chiunque avrà. un pò di pazienza.

  2. #2
    giorgio rancati Guest

    Re: Leggere un valore da un campo variabile acquisito da una query.

    "Damiano" <Damiano.discussions.microsoft.com> ha scritto nel messaggio
    news:9B71FF4F-FDE8-4AEB-8735-1FB76AAB56D3.microsoft.com...
    > Compongo un testo word, con definiti una serie di bookmarks e per fare

    questo
    > ho creato una tabella che contiene il nome del bookmark e il nome della
    > variabile della tabella, da cui prendere il valore.
    > Via codice con una select leggo bookmark e variabile: questa è parte del
    > codice:
    > ...
    > Variab = !Bookmark
    > doc.bookmarks(variab).select ' seleziona il bookmark
    >
    > CampoDb = eval(!Variabile)
    >
    > wrd.selection.typetext CampoDb
    > ...
    > Cosi facendo avevo capito che CampoDb avrebbe avuto il valore del campo
    > della tabella indicato su !Variabile. Ma così non avviene.
    > Come mi devo comportare?
    >


    umm vediamo se ho capito....
    tu voui il contenuto del campo il cui nome è memorizzato nel campo Variabile
    ?

    se è così e dando per scontato che il tuo codice è nell'ambito di un *With
    Rs*
    ---
    CampoDb = .Fields(!Variabile))
    ---

    se non è così allora non ho capito :-)

    Ciao
    --
    Giorgio Rancati
    [Office Access MVP]



  3. #3
    Damiano Guest

    Re: Leggere un valore da un campo variabile acquisito da una query


    "giorgio rancati" ha scritto:

    > "Damiano" <Damiano.discussions.microsoft.com> ha scritto nel messaggio
    > news:9B71FF4F-FDE8-4AEB-8735-1FB76AAB56D3.microsoft.com...
    > > Compongo un testo word, con definiti una serie di bookmarks e per fare

    > questo
    > > ho creato una tabella che contiene il nome del bookmark e il nome della
    > > variabile della tabella, da cui prendere il valore.
    > > Via codice con una select leggo bookmark e variabile: questa è parte del
    > > codice:
    > > ...
    > > Variab = !Bookmark
    > > doc.bookmarks(variab).select ' seleziona il bookmark
    > >
    > > CampoDb = eval(!Variabile)
    > >
    > > wrd.selection.typetext CampoDb
    > > ...
    > > Cosi facendo avevo capito che CampoDb avrebbe avuto il valore del campo
    > > della tabella indicato su !Variabile. Ma così non avviene.
    > > Come mi devo comportare?
    > >

    >
    > umm vediamo se ho capito....
    > tu voui il contenuto del campo il cui nome è memorizzato nel campo Variabile
    > ?
    >
    > se è così e dando per scontato che il tuo codice è nell'ambito di un *With
    > Rs*
    > ---
    > CampoDb = .Fields(!Variabile))
    > ---
    >
    > se non è così allora non ho capito :-)
    >
    > Ciao
    > --
    > Giorgio Rancati
    > [Office Access MVP]

    Proprio così.
    Sono in With Rst...
    Se metto CampoDB = .Fields(!Campo) mi esce un errore che mi dice "Elemento
    non trovato in questo insieme"

    Grazie :}


  4. #4
    Damiano Guest

    Re: Leggere un valore da un campo variabile acquisito da una query

    Specifico: il comando di apertura file word parte da una form,. dove sto
    gestendo un record.

    La funzione deve leggere via Select un'altra tabella dove si trovano i
    riferimenti ai bookmarks e ai nomi dei campi della tabella che sto gestendo
    nella form.
    La funzione deve analizzare il documento word e puntando al bookmark
    sostituirlo con il valore del campo (nome del campo letto con la select) che
    si trova nella form in uso.
    Funziona tutto correttamente se al posto del nome del campo letto nella
    select utilizzo direttamente il nome del campo della tabella.

  5. #5
    giorgio rancati Guest

    Re: Leggere un valore da un campo variabile acquisito da una query

    "Damiano" <Damiano.discussions.microsoft.com> ha scritto nel messaggio
    news:14200DE3-B3A1-41B7-B271-D108DF9FA6DB.microsoft.com...
    > Specifico: il comando di apertura file word parte da una form,. dove sto
    > gestendo un record.
    >
    > La funzione deve leggere via Select un'altra tabella dove si trovano i
    > riferimenti ai bookmarks e ai nomi dei campi della tabella che sto

    gestendo
    > nella form.
    > La funzione deve analizzare il documento word e puntando al bookmark
    > sostituirlo con il valore del campo (nome del campo letto con la select)

    che
    > si trova nella form in uso.
    > Funziona tutto correttamente se al posto del nome del campo letto nella
    > select utilizzo direttamente il nome del campo della tabella.



    se il campo è relativo al form aperto e al record corrente prova così
    ---
    CampoDb = Me.RecordSet.Fields(!Variabile))
    ----
    (da Acc2000 in avanti)

    Ciao
    --
    Giorgio Rancati
    [Office Access MVP]



  6. #6
    Maurizio Borrelli Guest

    Re: Leggere un valore da un campo variabile acquisito da una query.

    "Damiano" ha scritto nel messaggio
    news:9B71FF4F-FDE8-4AEB-8735-1FB76AAB56D3.microsoft.com...
    > Compongo un testo word, con definiti una serie di bookmarks e per fare
    > questo ho creato una tabella che contiene il nome del bookmark e il nome
    > della variabile della tabella, da cui prendere il valore.
    > Via codice con una select leggo bookmark e variabile: questa è parte del
    > codice:
    > ...
    > Variab = !Bookmark
    > doc.bookmarks(variab).select ' seleziona il bookmark
    > CampoDb = eval(!Variabile)
    > wrd.selection.typetext CampoDb
    > ...
    > Cosi facendo avevo capito che CampoDb avrebbe avuto il valore del campo
    > della tabella indicato su !Variabile. Ma così non avviene.
    > Come mi devo comportare?


    Ciao, Damiano.

    Non serve selezionare i segnalibri. Un esempio:

    Option Base 0
    Option Compare Database
    Option Explicit

    Public Sub FillWdBookmarks()
    Const c_strFilename As String = "D:\Percorso\Bookmarks.doc"
    Dim sqlBmks As String
    Dim rstBmks As DAO.Recordset
    Dim fldBmk As DAO.Field
    Dim fldVal As DAO.Field

    Dim sqlFlds As String
    Dim rstFlds As DAO.Recordset

    Dim objWdApp As Word.Application
    Dim objWdDoc As Word.Document
    Dim objWdBmks As Word.Bookmarks
    Dim objWdBmk As Word.Bookmark
    Dim objWdRng As Word.Range

    sqlBmks = "SELECT"
    sqlBmks = sqlBmks & " T.txtBookmark AS txtBookmark"
    sqlBmks = sqlBmks & ","
    sqlBmks = sqlBmks & " T.txtField AS txtField"
    sqlBmks = sqlBmks & " FROM"
    sqlBmks = sqlBmks & " tblWdBmks AS T"

    sqlFlds = "SELECT"
    sqlFlds = sqlFlds & " T.IDCategoria AS IDCategoria"
    sqlFlds = sqlFlds & ","
    sqlFlds = sqlFlds & " T.NomeCategoria AS NomeCategoria"
    sqlFlds = sqlFlds & ","
    sqlFlds = sqlFlds & " T.Descrizione AS Descrizione"
    sqlFlds = sqlFlds & " FROM"
    sqlFlds = sqlFlds & " Categorie AS T"
    sqlFlds = sqlFlds & " WHERE ("
    sqlFlds = sqlFlds & " (T.IDCategoria = 1)"
    sqlFlds = sqlFlds & ")"

    With Application.CurrentDb
    Set rstBmks = .OpenRecordset(sqlBmks, DAO.dbOpenSnapshot)
    Set rstFlds = .OpenRecordset(sqlFlds, DAO.dbOpenSnapshot)
    End With
    With rstBmks.Fields
    Set fldBmk = .Item("txtBookmark")
    Set fldVal = .Item("txtField")
    End With

    Set objWdApp = CreateObject("Word.Application")
    With objWdApp
    .Visible = True
    .DisplayAlerts = wdAlertsNone
    End With

    Set objWdDoc = objWdApp.Documents.Open(c_strFilename)
    Set objWdBmks = objWdDoc.Bookmarks

    ' Debug
    With rstBmks
    .MoveFirst
    Do Until .EOF
    With fldBmk
    Debug.Print .Name _
    , .Value _
    , "'"; objWdBmks.Item(.Value).Range.Text; "'"
    End With
    With fldVal
    Debug.Print .Name _
    , .Value _
    , "'"; rstFlds.Fields.Item(.Value).Value; "'"
    End With
    .MoveNext
    Loop
    End With

    ' Write
    With rstBmks
    .MoveFirst
    Do Until .EOF
    Set objWdRng = objWdBmks(fldBmk.Value).Range
    With objWdRng
    .SetRange .Start, .End - 1
    .Text = rstFlds.Fields(fldVal.Value).Value
    End With
    .MoveNext
    Loop
    End With

    ' Debug
    For Each objWdBmk In objWdBmks
    With objWdBmk
    Debug.Print .Name, "'"; .Range.Text; "'"
    End With
    Next

    objWdDoc.SaveAs objWdDoc.Path & "\Test.doc"
    objWdApp.Quit False

    Set objWdRng = Nothing
    Set objWdBmk = Nothing
    Set objWdBmks = Nothing
    Set objWdDoc = Nothing
    Set objWdApp = Nothing

    Set fldBmk = Nothing
    Set fldVal = Nothing
    Set rstFlds = Nothing
    Set rstBmks = Nothing
    End Sub

    --
    (Facci sapere se ed eventualmente come hai risolto. Grazie.)

    Ciao )
    Maurizio Borrelli, Microsoft MVP - Office Systems - Access
    --------
    ?SPQR(C)
    X
    --------



  7. #7
    Damiano Guest

    Re: Leggere un valore da un campo variabile acquisito da una query

    Continua a darmi errore. Questo è il modulo:


    Private Sub DocWTb(Testo As String, Titolo As String, IDTesto As Integer,
    TipoAut As String)
    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 ReplSel As Boolean
    Dim SQL As String
    Dim Variab As String, CampoDB As String, Txt As String

    Modello = Testo

    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 le variabili e i bookmarks
    SQL = "SELECT * FROM TbRif WHERE IDTesto = " & IDTesto & ";"
    Set Rst = CurrentDb.OpenRecordset(SQL)

    If Not Rst.BOF Then ' se il recordset non è vuoto
    With Rst
    .MoveFirst
    While Not .EOF
    Variab = !Variab
    CampoDB = Me.Recordset.Fields(!Campo) ' ############ NON
    FUNZIONA!!!!
    Doc.Bookmarks(Variab).Select ' Seleziona il bookmark dal
    testo
    'MsgBox Variab & " - " & CampoDB
    If IsNull(CampoDB) Then
    Wrd.Selection.TypeText "...."
    Else
    If !Campo = "TipoAut" Then
    Wrd.Selection.TypeText TipoAut
    Else
    If !Campo = "Oggi" Then
    Wrd.Selection.TypeText Date
    Else
    Wrd.Selection.TypeText CampoDB
    End If
    End If
    End If
    .MoveNext
    Wend
    End With
    Else
    MsgBox "Non ci sono campi valorizzati sulla tabella Riferimenti",
    vbCritical, "Completamento tabella"
    End If
    Rst.Close
    Set Rst = Nothing

    ' Ripristina il valore originario dell'opzione "Sostituisci la selezione"
    Wrd.Options.ReplaceSelection = ReplSel

    'avvisa l'utente che l'esportazione è terminata
    Wrd.Application.WordBasic.MsgBox "Compilazione testo terminata", Titolo

    '============================

    'azzera le variabili oggetto
    Set Doc = Nothing
    Set Wrd = Nothing

    End Sub

  8. #8
    giorgio rancati Guest

    Re: Leggere un valore da un campo variabile acquisito da una query

    "Damiano" <Damiano.discussions.microsoft.com> ha scritto nel messaggio
    newsBB9FA99-2EA9-4A81-ACA9-9ADF27871D7C.microsoft.com...
    [CUT]
    > CampoDB = Me.Recordset.Fields(!Campo) ' ############ NON
    > FUNZIONA!!!!


    sarebbe bello sapere cosa vuol dire non funziona.
    ti viene reso qualche errore ?
    CampoDb non viene valorizzato come ti aspettavi ?

    a me viene il sospetto che il codice si trovi al di fuori del codice di
    classe della maschera quindi il riferimento Me non va bene.
    Se il codice da te riportato è in un modulo bas bisogna passargli anche il
    riferimento della maschera oppure sostituire Me.Recordset.Fields(!Campo) con
    Screen.ActiveForm.Recordset.Fields(!Campo).

    Ciao
    --
    Giorgio Rancati
    [Office Access MVP]



  9. #9
    Damiano Guest

    Re: Leggere un valore da un campo variabile acquisito da una query

    NON FUNZIONA vuol dire che continua sempre a darmi la stessa segnalazione
    "Elemento non trovato per questo insieme".
    Neanche con il tuo ultimo suggerimento.

    "giorgio rancati" ha scritto:

    > "Damiano" <Damiano.discussions.microsoft.com> ha scritto nel messaggio
    > newsBB9FA99-2EA9-4A81-ACA9-9ADF27871D7C.microsoft.com...
    > [CUT]
    > > CampoDB = Me.Recordset.Fields(!Campo) ' ############ NON
    > > FUNZIONA!!!!

    >
    > sarebbe bello sapere cosa vuol dire non funziona.
    > ti viene reso qualche errore ?
    > CampoDb non viene valorizzato come ti aspettavi ?
    >
    > a me viene il sospetto che il codice si trovi al di fuori del codice di
    > classe della maschera quindi il riferimento Me non va bene.
    > Se il codice da te riportato è in un modulo bas bisogna passargli anche il
    > riferimento della maschera oppure sostituire Me.Recordset.Fields(!Campo) con
    > Screen.ActiveForm.Recordset.Fields(!Campo).
    >
    > Ciao
    > --
    > Giorgio Rancati
    > [Office Access MVP]
    >
    >
    >


  10. #10
    giorgio rancati Guest

    Re: Leggere un valore da un campo variabile acquisito da una query

    "Damiano" <Damiano.discussions.microsoft.com> ha scritto nel messaggio
    news:4385DDFE-E7B6-4938-845D-D0DFC7F4EC17.microsoft.com...
    > NON FUNZIONA vuol dire che continua sempre a darmi la stessa segnalazione
    > "Elemento non trovato per questo insieme".
    > Neanche con il tuo ultimo suggerimento.
    >


    Allora significa che il campo il cui nome è ricavato dal valore di
    *!Variabile* non esiste nell'insieme Fields del recordset della tua
    maschera.

    Controlla che valore contiene *!variabile* e se corrisponde al nome di un
    campo del recordset della tua maschera.

    Ciao
    --
    Giorgio Rancati
    [Office Access MVP]



Similar Threads

  1. Valore variabile
    By Nunzio in forum microsoft.public.it.office.excel
    Replies: 4
    Last Post: 12-22-2007, 08:10 AM
  2. cambiare il valore di una variabile
    By Francesco in forum microsoft.public.it.office.excel
    Replies: 24
    Last Post: 11-29-2007, 07:14 AM
  3. Cambio Valore campo query
    By Device in forum microsoft.public.it.sql
    Replies: 3
    Last Post: 09-13-2006, 01:19 PM
  4. valore variabile in cella
    By Stefano R. in forum microsoft.public.it.office.excel
    Replies: 1
    Last Post: 04-11-2005, 08:31 PM
  5. aggiungere un campo con valore predefinito in una query
    By luigimut in forum microsoft.public.it.office.access
    Replies: 4
    Last Post: 12-28-2004, 11:47 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
If you are still using perl webstats, then give GoStats a try.  It's free.