Problema con un campo formattato come Testo Lungo

di Barsyk il
106 risposte

Buongiorno, avrei bisogno di sapere se c'è un modo per “prelevare” da un campo Testo Lungo solo alcune parole, senza dover trasformare il campo da T.L. a Testo Breve (che altrimenti le “taglierebbe”). Certo, potrei copiare e incollare, ma si tratta di quasi 500 record e la cosa diventerebbe piuttosto lunga. Chiedo quindi se c'è un modo, magari inserendo un'espressione che riguarda le stringhe in una query.

Grazie.

106 Risposte

  • Con quali criteri vorresti escludere questa o quella parola? Puoi fare qualche esempio?

  • In realtà non ho necessità di criteri precisi, mi basterebbe prendere le prime tre o massimo quattro parole di ogni record.

  • Intanto direi di leggere qui
    Funzioni stringa e come usarle - Supporto tecnico Microsoft
    Si potrebbe elaborare una espressione piuttosto complessa…io non ci arrivo su due piedi. In alternativa implementerei una Public Function in un modulo standard. In essa faccio entrare il CampoTestoLungo in questione. Utilizzando la funzione InStr e cercando il carattere “ ” (spazio), da essa puoi sapere la posizione del 1° spazio. Quindi potresti prelevare la 1a parola usando Left. Questa parola la memorizzi in una variabile Parola1. Poi fai un Replace della stringa eliminando Parola1 e lo spazio. Ripeti questa operazione altre 3 volte.
    Ti ho dato delle indicazioni orientative, poi si tratta di tradurre tutto correttamente in VBA.

  • Grazie, proverò a fare come dici, intanto guardo il Supporto. grazie ancora.

  • Leggendo altrove problematiche simili, pare che la soluzione sia solo via Function. Io ho elaborato questo, ipotizzando di tagliare fino a un massimo di 4 parole. In una tabella Titoli ho un campo Titolo (nel mio caso è testo breve…spero funzioni anche per testo lungo).
    1. Apro una query in visualizzazione struttura
    2. Importo la tabella Titoli
    3. Trascino il campo Titolo
    4. In una nuova colonna scrivo questo:
    Testo4parole: fT4P([Titolo])
    5. Salvo la query con nome T4P
    6. Apro un Modulo dove dentro ci ho scritto questo:

    Public Function fT4P(Titolo) As String
    Dim strRidotto As String, strTL As String
    Dim bySpazio As Byte, K As Byte
    strTL = Titolo
    For K = 1 To 4
    bySpazio = InStr(strTL, " ")
    If bySpazio > 0 Then
       strRidotto = strRidotto & " " & Left(strTL, bySpazio - 1)
       strTL = Replace(strTL, Left(strTL, bySpazio), "")
       Else
       strRidotto = strRidotto & " " & strTL
       GoTo Fine
    End If
    Next K
    Fine:
    fT4P = strRidotto
    End Function

    7. Salvo il Modulo1
    8. Apro la query T4P

    Ho fatto un test e funziona.

  • Grazie mille davvero! Copio e provo (con i dovuti cambiamenti).

  • Ciao, ho tentato poco fa (5,40 di sabato mattina), ma non capisco dove devo scrivere Testo4Parole (in una colonna vuota della query non lo accetta).

  • AGGIORNAMENTO: ho capito dove inserire la funzione e l'ho fatto, tuttavia non mi ha dato nulla, eseguita la query tutto bianco.

  • Copia la funzione di Osvaldo in un modulo.

    Poi in un campo della query scrivi: TitoloC: ft4P([Titolo])

    Se vuoi applicare la funzione al campo [Titolo].

    Altrimenti al campo [Soggetto] per vuoi applicarlo a Soggetto.

  • Antony73, è quello che ho fatto (cambiando ovviamente i nomi e altro) come si può vedere dal primo screenshot, ma purtroppo senza risultato.

  • Lo screenshot della query non dice questo.

  • Dove ho sbagliato? Hai guardato anche lo screen del codice?

Devi accedere o registrarti per scrivere nel forum
106 risposte