Programmazione VBA per Access

di il
14 risposte

Programmazione VBA per Access

Buon giorno a tutti e grazie perché fino ad ora ho potuto prendere diverse volte spunto da questo forum.
Premetto che utilizzo un database Access per la gestione di una piccola attività con scarsa conoscenza VBA.

Cerco aiuto adesso perchè vorrei importare in una tabella temporanea i dati da un file .csv. Ho utilizzato il wizard per la importazione automatica che poi richiamo da vba con un click da bottone. Il problema è che all'interno del file testo alcuni dati sono separati con ' ed altri con " e il wizard non mi permette di scegliere entrambi ma uno solo come separatore.

Mi si presentano adesso due strade:

1-Importo il file di testo con un codice VBA (per me impossibile...)
2-Apro il file con codice VBA prima di importare i dati e modifico le righe di testo sostituendo " con '(sembrerebbe la soluzione più semplice…)
Qualcuno riesce per piacere a darmi una mano nella stesura del codice corretto?
Grazie a chi riuscirà ad aiutarmi

14 Risposte

  • Re: Programmazione VBA per Access

    E' possibile vedere uno "spezzone" di codice da modificare?
  • Re: Programmazione VBA per Access

    turf_andrea ha scritto:


    E' possibile vedere uno "spezzone" di codice da modificare?
    Codice per cosa...?
    Quello che definisci (Impossibile per te) ha la medesima complessità del secondo punto..., ci saranno 4 righe di codice diverso, tant'è che il problema comune è come aprire il File, poi in un caso devi scorrere le RIGE, ed inserire nella Tabella nell'altro fare un REPLACE...
    Quindi quale sarebbe il problema reale che vuoi affrontare...?
    Se il 2°ritieni sia meno complesso, inizia mostrandoci la parte che, contrariamente alla prima ipotesi, pensi di poter gestire e vediamo come orientarti su quella da implementare... altrimenti non comprendo cosa possa significare per te definirlo "più semplice" se poi vuoi codice da cui partire....
  • Re: Programmazione VBA per Access

    Ecco qui. Questa è una riga di file .csv che diverrà un record nella tabella Access

    'Fattura tra privati';Fattura;121;27/02/2019;'10411170151';"000000000540,00";"000000000118,80";420698654;Fattura consegnata;28/02/2019

    Se notate ogni campo è delimitato dal ; e il qualificatore testo da ' e ( per i campi numero ) da ".
    Quello che vorrei è importare in una tabella già presente con 10 campi (Campo1, Campo2...Campo10)
    Fattura tra privati andasse in Campo1 formato testo
    Fattura andasse in Campo2 formato testo
    121 andasse in Campo3 formato testo
    27/02/2019 andasse in Campo4 formato data
    10411170151 andasse in Campo5 formato testo
    540,00 andasse in Campo6 formato numerico
    118,80 andasse in Campo7 formato numerico
    420698654 andasse in campo8 formato testo
    Fattura consegnata andasse in Campo9 formato testo
    28/02/2019 andasse in Campo10 formato data

    per n righe del file .csv

    Andrebbe bene fare tutto da codice… sarebbe molto più ordinato e carino…

    Spero di essere chiaro adesso e scusatemi per la mia "sintassi...
  • Re: Programmazione VBA per Access

    Ecco appunto... devi leggere da VBA il File e scrivere nella Tabella.
    Partendo da quì quale parte non sei in grado di fare e quale si...?
  • Re: Programmazione VBA per Access

    Ecco qui. Questa è una riga di file .csv che diverrà un record nella tabella Access

    'Fattura tra privati';Fattura;121;27/02/2019;'10411170151';"000000000540,00";"000000000118,80";420698654;Fattura consegnata;28/02/2019

    Se notate ogni campo è delimitato dal ; e il qualificatore testo da ' e ( per i campi numero ) da ".
    Quello che vorrei è importare in una tabella già presente con 10 campi (Campo1, Campo2...Campo10)
    Fattura tra privati andasse in Campo1 formato testo
    Fattura andasse in Campo2 formato testo
    121 andasse in Campo3 formato testo
    27/02/2019 andasse in Campo4 formato data
    10411170151 andasse in Campo5 formato testo
    540,00 andasse in Campo6 formato numerico
    118,80 andasse in Campo7 formato numerico
    420698654 andasse in campo8 formato testo
    Fattura consegnata andasse in Campo9 formato testo
    28/02/2019 andasse in Campo10 formato data

    per n righe del file .csv

    Andrebbe bene fare tutto da codice… sarebbe molto più ordinato e carino…

    Spero di essere chiaro adesso e scusatemi per la mia "sintassi...
    Purtroppo sono un pò arruginito con il VBA però potresti partire con :

    Dim ValoriRecords() As String
    ValoriRecords = Split(stringaRecord,";")

    In ValoriRecords ti troverai un elemento per ogni campo
  • Re: Programmazione VBA per Access

    Ok… allora sono riuscito a spiegarmi…
    Con VBA so solo aprire maschere, creare messaggi e qualche if… niente di più…
  • Re: Programmazione VBA per Access

    AndreaSartori ha scritto:


    Ok… allora sono riuscito a spiegarmi…
    Con VBA so solo aprire maschere, creare messaggi e qualche if… niente di più…
    Scusa allora cosa intendevi quando hai detto:
    2-Apro il file con codice VBA prima di importare i dati e modifico le righe di testo sostituendo " con '(sembrerebbe la soluzione più semplice…) 
    Mi riferisco al "sembrerebbe più semplice"... perché la comparazione presume capacità di analisi della complessità... e mi pare improbabile con quanto dici.

    Il codice pronto non te lo forniremo come dovresti aver già letto nel refolamento, quindi se vuoi provare a scomporre il problema in 2 iniziando a cercare come aprire un file da VBA e poi vediamo come scrivere nella tabella...!

    Qui per iniziare:
    http://forum.masterdrive.it/microsoft-office-access-vba-23/vba-lettura-scrittura-file-testo-14740/
    Inizia a provare e fare Debug... per vedere come funziona...
  • Re: Programmazione VBA per Access

    Grazie. Ho capito… ho letto superficialmente il regolamento e supponevo si potesse avere il codice impacchettato a misura… Mi scuso!
    Avevo cominciato con questo, credendo che bastasse un replace… per "imboccare" la prima strada…
    La credevo più semplice perché pensavo solo di modificare le " con ' e continuare con l'importazione salvata…
    Ma come dicevo non conosco la sintassi corretta per il codice VBA.
    Questo avevo provato:
    Open "C:\Users\Desktop\Fatture Fornitori\Importazioni.csv" For Output As #1
    Replace [#1], ["], [']
  • Re: Programmazione VBA per Access

    Nel link che ti ho fornito, trovi l'esempio perfetto per te per ciclare il File RIGA per RIGA... da li devi prima capire come analizzare il dato recuperato... e poi implementare una routine di SCRITTURA nella tabella.

    Quì trovi un secondo esempio di come scrivere in Tabella
    http://forum.masterdrive.it/access-79/access-leggere-scrivere-dati-nelle-tabelle-tramite-vba-dao-13176/

    Purtroppo, lo dico per esperienza, queste cose non sono immediate soprattutto se non hai un minimo di basi di VBA, pertanto di solito si pone un bivio... ti evolvi come conoscenza di VBA studiando e facendo prove tue, oppure fai fare ad altri...
    La prima è sicuramente più funzionale anche al futuro, ma non è detto che tutti ne abbiano bisogno di evolvere...!
    Buon Lavoro.
  • Re: Programmazione VBA per Access

    Grazie. "Sviluppo" ( se si posso permettermi di utilizzare questo verbo… ) un database da 10 anni per il mio lavoro. E' molto sempliciotto… volevo renderlo più funzionale ed automatizzato, con maggiori controlli…
    Vorrei tanto fare un corso di VBA per affinare ma purtroppo c'è poco tempo.
    Grazie Alex per il tuo suggerimento. Darò un'occhiata.
  • Re: Programmazione VBA per Access

    AndreaSartori ha scritto:


    Ecco qui. Questa è una riga di file .csv che diverrà un record nella tabella Access

    'Fattura tra privati';Fattura;121;27/02/2019;'10411170151';"000000000540,00";"000000000118,80";420698654;Fattura consegnata;28/02/2019

    Se notate ogni campo è delimitato dal ; e il qualificatore testo da ' e ( per i campi numero ) da ".
    Quello che vorrei è importare in una tabella già presente con 10 campi (Campo1, Campo2...Campo10)
    Fattura tra privati andasse in Campo1 formato testo
    Fattura andasse in Campo2 formato testo
    121 andasse in Campo3 formato testo
    27/02/2019 andasse in Campo4 formato data
    10411170151 andasse in Campo5 formato testo
    540,00 andasse in Campo6 formato numerico
    118,80 andasse in Campo7 formato numerico
    420698654 andasse in campo8 formato testo
    Fattura consegnata andasse in Campo9 formato testo
    28/02/2019 andasse in Campo10 formato data

    per n righe del file .csv

    Andrebbe bene fare tutto da codice… sarebbe molto più ordinato e carino…

    Spero di essere chiaro adesso e scusatemi per la mia "sintassi...
    Premesso che la soluzione ottimale è quella esposta da @Alex , questa potrebbe essere un pagliativo ma con limitazioni:

    Se il file CSV ha sempre quelle caratteristiche
    Se è una tabella temporanea che ogni volta puoi ricreare
    potresti utilizzare l'importazione di access utilizzando come separatore di testo solo ' (apice)
    i due campi compresi fra " (Doppio Apice) li lavori dopo aprendo la tabella creata
    DoCmd.RunSavedImportExport "Importa-latuatabella"
    
    Dim CampoDaModificare1, CampoDaModificare2
    
    Dim Connessione As ADODB.Connection
    Dim Tabella As ADODB.Recordset
    Set Connessione = CurrentProject.Connection
    Set Tabella = New ADODB.Recordset
    
    'apro la TABELLA UTILIZZATA
      Tabella.Open "latuatbella", Connessione, adOpenDynamic, adLockOptimistic
                         
      Do Until Tabella.EOF
      CampoDaModificare1 = Tabella("Campo6")
      CampoDaModificare2 = Tabella("Campo7")
     
      CampoDaModificare1 = Qui puoi utilizzare il replace per togliere "
      CampoDaModificare2  =Qui puoi utilizzare il replace per togliere "
     
         With Tabella
        .Fields("Campo6") = CampoDaModificare1
        .Fields("Campo7") = CampoDaModificare2
        .Update
        End With
     
      Tabella.MoveNext
      
      Loop
    
    Tabella.Close
    Connessione.Close
    Set Connessione = Nothing
    Set Tabella = Nothing
    
    
    finito di aggiornare i valori modifichi il tipo dei campi tabella come preferisci
    'modifichi il tipo di campo da testo ... in questo caso a precisione doppia
    CurrentDb.Execute "ALTER TABLE latuatabella ALTER COLUMN ilcampodamodificare Double"
    CurrentDb.Execute "ALTER TABLE latuatabella ALTER COLUMN ilcampodamodificare Double"
  • Re: Programmazione VBA per Access

    Oppure meglio...senza aprire la tabella fai direttamente una query...su qui' due campi....dopo l'import
    DoCmd.RunSavedImportExport "Importa-latuatabella"
    
    Dim strsql As String
    
    strsql = "UPDATE Prova SET CampodaPulire1 = Replace(CampodaPulire1, '" & Chr(34) & "', ''), CampodaPulire2 = Replace(CampodaPulire2, '" & Chr(34) & "', '');"
    
    DoCmd.RunSQL strsql
    
    
    e poi cambi il tipo dei campi
  • Re: Programmazione VBA per Access

    Buon giorno. Grazie Marmauro. Sembra funzionare proprio perché il csv ha sempre le stesse caratteristiche.
  • Re: Programmazione VBA per Access

    Buonasera.
    Sempre nel tentare di completare la macro in VBA per l'importazione del file csv, mi trovo adesso davanti ad un piccolo ostacolo… Come faccio, prima di assegnare con un ciclo loop i dati del file ad n campi tabella, ad eliminare solo la prima riga del file stesso?
    Spero che qualcuno mi suggerisca l'istruzione… ho provato semplicemente con MoveNext dopo l'open del file, ma non funziona…
    Buon serata a tutti.
Devi accedere o registrarti per scrivere nel forum
14 risposte