Codice VBA per confronto record

di il
3 risposte

Codice VBA per confronto record

Ciao,

non sono pratico del codice VBA, ma ho provato a leggere qualcosa online. Vi spiego il mio problema devo leggere i dati da una Tabella1 ed effettuare un confronto tra record (corrente e precedente) e creare una nuova colonna Campo5.
Se il Campo1 è uguale a "PRIMO" Campo5 deve essere A, altrimenti va confrontato il Campo2 tra il record corrente e il record precedente: se il Campo2 del precedente è A devo dare al Campo5 valore D, altrimenti se è D devo dargli A.
Ho buttato giù una bozza del codice ma ovviamente non funziona, ma era per rendere l'idea. Vi chiedo una mano per ristrutturarlo

Infine vorrei sapere se una volta creato questo Campo5 nella Tabella1 posso esportarlo in una tabella/query di access per poterci lavorare


Sub Esegui()

Dim DBCorrente As DAO.Database
Dim Tabella As DAO.Recordset

Set DBCorrente = CurrentDb
Set Tabella = DBCorrente.OpenRecordset("Tabella1", dbOpenDynaset)

Tabella.Edit

Do While Not Tabella.EOF
If Tabella1.[Campo1] = "PRIMO" Then
Tabella1.[Campo5] = "A"
ElseIf Tabella1.[Campo2](i) = Tabella1.[Campo2](i - 1) Then
Tabella1.[Campo5] = Tabella1.[Campo5](i - 1)

ElseIf Tabella1.[Campo2](i) <> Tabella1.[Campo2](i - 1) And Tabella1.[Campo5](i - 1) = "A" Then
Tabella1.[Campo5](i) = "D"

ElseIf Tabella1.[Campo2](i) <> Tabella1.[Campo2](i - 1) And Tabella1.[Campo5](i - 1) = "D" Then
Tabella1.[Campo5](i) = "A"
End If


Tabella.MoveNext
Loop

Tabella.Close
DBCorrente.Close

End Sub

3 Risposte

  • Re: Codice VBA per confronto record

    Non so. Ciò che chiedi forse si può risolvere in VBA. Lascio volentieri ad altri più esperti (eventuale) da farsi. Forse vado fuori tema, ma (da parte mia) ti chiedo:
    - Si tratta di una operazione da svolgere una volta sola?
    - Parli di Tabella1 e Campo1, Campo2, Campo3, Campo4, Campo5. Questi dati hanno una loro omogeneità?
    - Si tratta solo di un esercizio per vedere se funziona una routine inventata da te?
  • Re: Codice VBA per confronto record

    Ciao,

    a lavoro stavo facendo una cosa simile e ci ho sbattuto la testa con le query di access, vorrei prendere dimestichezza con VBA quindi l'ho semplificato per vedere se riuscivo a svolgere un esercizio simile. Il mio problema con le query è che il Campo5 parte come vuoto (so solo che il primissimo record sarà PRIMO e quindi con valore del Campo5 A) e facendo il confronto tra due record in una situazione statica non riesco a generare il Campo5 per tutto il database. Sarebbe necessario usare un ciclo ed è per questo che ho pensato di guardare la cosa con VBA
  • Re: Codice VBA per confronto record

    Cosa sarebbe quel riferimento (i-1)...?
    Cioè questa roba cosa significa...?
    
    ElseIf Tabella1.[Campo2](i) = Tabella1.[Campo2](i - 1) Then
    
    Sai che stai usando i recordset e non un'array...?

    Per spostarsi tra i records, il precedente nel tuo caso, si usano i metodi corretti, eventualmente dovresti leggere in relazione a MovePrevious ... ma nel tuo caso non serve spostarsi basta memorizzare in una variabile il valore del record attivo ed usarlo al passaggio successivo.come PreviousValue... al primo passaggio ovviamente vale zero...

    Perche chiami il metodo EDIT all'inizio...?
    Lo si apre quando la condizione è verificata e lo si chiude appena terminato di modificare il record corrente... prima di passare al successivo.

    Insomma ci sono veramente parecchie cose che non vanno.
Devi accedere o registrarti per scrivere nel forum
3 risposte