TRIM, SUBSTITUTE e CLEAN in VBA

di il
4 risposte

TRIM, SUBSTITUTE e CLEAN in VBA

Ciao a tutti,
su una maschera Access ho inserito un pulsante che all'evento click permette di caricare un file excel e di accodare i dati contenuti sulla cartella su una tabella acess.

Sulla stessa maschera ho scritto delle specifiche su come deve essere strutturato il file excel prima dell'importazione inserendo anche uno screenshot di esempio di una tabella excel correttamente compilata.

Adesso, se possibile, vorrei fare in modo che i dati vengano "puliti" prima di essere importati.
Cercando in rete ho visto che su access esistono tre funzioni che fanno al caso mio, ovvero che_
-eliminano eventuali spazi all'inizio e alla fine del testo -> TRIM
-eliminano eventuali spazi doppi tra il testo -> SUBSTITUTE
-eliminano eventuali catatteri non stampabili nel testo -> CLEAN

Sarebbe possibile applicare queste funzioni prima di caricare di dati sulla tabella access?

In particolare, la tabella specifica contiene i seguenti campi:
-ID (tipo contatore, colonna non presente su excel);
-Matricola (tipo testo, campo non obbligatorio, campo univoco, su excel tale colonna può essere compilata o bianca);
-Cognome (tipo testo, campo obbligatorio)
-Nome (tipo testo, campo obbligatorio);
-Data di nascita (tipo data, campo obbligatorio)
-Foto (tipo testo, campo uguale per tutti i record "user.jpg")

Mi aiutate?

Grazie.

4 Risposte

  • Re: TRIM, SUBSTITUTE e CLEAN in VBA

    Una volta importati devi fare N query di Aggiornamento sul Campo oggetto di "bonifica".

    Le funzioni da usare sono TRIM, REPLACE, ed hai 2 strade, eseguire N query di Aggiornamento, oppure aprire il Recordset sulla tabella dati, ciclarli e passare il campo incriminato ad una Funzione che devi scrivere

    La query da usare è appunto un Aggiornamento:
    
    UPDATE T1 Set NomeCampo=Trim(NomeCampo)
    UPDATE T1 Set NomeCampo=Replace(NomeCampo,'  ',' ')
    UPDATE T1 Set NomeCampo=Replace(NomeCampo,'Carattere1','')
    UPDATE T1 Set NomeCampo=Replace(NomeCampo,'Carattere2','')
    etc...
    Se invece usi la Funzione, devi scriverla, apri il Rs in Edit passi alla Funzione il contenuto del Campo incriminato, lo bonifichi e fai l'Update:
    
    Function CleanText(pText As String) As String
        On Error Goto Err_Handler
        Dim sText As String
        sText=pText
        sText=Trim(sText)
        sText=Replace(sText,"Carattere1",vbNullstring)
        sText=Replace(sText,"Carattere2",vbNullstring)
        sText=Replace(sText,"Carattere3",vbNullstring)       
        ' elenco dei caratteri speciali da bonificare
    Exit_Here:
        CleanText=sText
        End Function
    Err_Handler
        sText=pText
        Resume Exit_Here
    End Function
    Questo secondo metodo, a mio avviso più strutturato, diventa molto più performante se inglobato in una Transazione.
  • Re: TRIM, SUBSTITUTE e CLEAN in VBA

    Ciao Alex e grazie della tua risposta.

    Gli unici caratteri che vorrei controllare e eliminare sono eventuali spazi prima e dopo il testo o spazi ripetuti tra il testo.

    Questo codice che mi hai suggerito dove andrebbe collocato?

    Io per caricare il file excel uso questa routine:
    Private Sub cmdImporta_Click()
    On Error GoTo Err_Handler
    
    Const cFileDialogFilePicker As Integer = 3
    Dim fd As Object
    Set fd = Application.FileDialog(cFileDialogFilePicker)
    fd.AllowMultiSelect = False
    fd.Filters.Clear
    fd.Filters.Add "xls, xlsx", "*.xls, *.xlsx"
    
    If fd.Show = True Then
        StrFileName = fd.SelectedItems(1)
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "AllieviAnagrafica", StrFileName, True
    Else
        Exit Sub
    End If
    
    Err_Handler:
    If Err = 2391 Then
        MsgBox "Attenzione: il file excel non rispetta i requisiti richiesti per l'importazione dei dati. Verificare il formato e riprovare", vbCritical, " Ops... :( "
    ElseIf Err = 3059 Then
        MsgBox "Operazione annullata dall'utente", vbExclamation
    ElseIf Err <> 0 Then
        MsgBox "Errore " & Str(Err.Number) & _
        Chr(13) & Err.Description, vbCritical, " Ops... :( "
    End If
    
    End Sub
    
  • Re: TRIM, SUBSTITUTE e CLEAN in VBA

    Se l'importazione avviene in Tabella temporanea, devi farlo dopo l'importazione, se importi direttamente nella tabella di Destinazione, non sarebbe una buona idea in quanto dovresti ripassare tutto per nulla...

    Fai attenzione che il codice che ti ho proposto non è da "COLLOCARE" ma è da capire e gestire nel modo corretto.
  • Re: TRIM, SUBSTITUTE e CLEAN in VBA

    I dati vengono importati direttamente nella tabella di destinazione.
    SI ho visto che il codice non è una pappa pronta (anzi per quello che ti conosco strano tu sia stato così generoso xD).

    In particolare, il secondo metodo essendo una funzione, potrei implementarla sul modulo pubblico che esiste sul database e poi richiamarla al momento opportuno... o in questo caso, essendo utilizzata solo su un determinato evento, non avrebbe senso?
Devi accedere o registrarti per scrivere nel forum
4 risposte