Funzione Ciclica in VBA per Access 2007

di il
12 risposte

Funzione Ciclica in VBA per Access 2007

Ho un Grande PROBLEMA ( bel rompicapo estivo !) con Access 2007 che non riesco a risolvere (per mia profonda ignoranza del VBA).

Ho due tabelle : Bollettazioni e CronoMovimenti, collegate (uno a molti) tra di loro da un CodStock e così strutturate:

Tabella :TBL Bollettazioni
Campi: CodStock (alfanumerico univoco); SommaDiBollettazioni (numerico standard a due decimali)

Tabella: TBL CronoMovimenti
Campi: CodStock(alfanumerico); Quantità (numerico standard a due decimali); TipoMovimento (numerico); Data (data in cifre)

Il TipoMovimento può essere =11 oppure =1

Premessa: Per ciascun CodStock , la SOMMA delle Quantità in TBL CronoMovimenti con TipoMovimento = 11 può essere Minore o Uguale o Maggiore alla SommaDiBollettazione ma, comunque, la SOMMA delle Quantità di TipoMovimento =11 + TipoMovimento=1 è sempre superiore alla SommaDiBollettazioni

Problema :
per ciascun CodStock di TBL Bollettazioni, in join con CodStock di TBL CronoMovimenti, la procedura deve :

- Processare ciascun record (a parità di CodStock) presente in TBL CronoMovimenti dalla Data più recente a quella più storica (remota)
- verificare se SommaDiBollettazioni è Uguale o Maggiore di Quantità del singolo record in TBL CronoMovimenti con TipoMovimento =11;
- aggiornare il valore di Quantità del singolo record sottraendo [SommaDiBollettazioni – Quantità] e portando a zero il singolo record in TBL CronoMovimenti ;
- aggiornare la SommaDiBollettazioni in TBL Bollettazioni con il nuovo residuo [SommaDiBolletazioni – Quantità].

Se in TBL CronoMovimenti non ci sono -per il singolo CodStock- TipoMovimenti = 11, la procedura passa alla seconda fase della routine

Il ciclo deve durare FINO A QUANDO
• non ci sono più record (alle stesse condizioni per ciascun CodStock ) da processare in TBL CronoMovimenti in quanto tutti azzerati (nel qual caso potrebbero esserci residui di SommaDiBollettazioni che poi verranno processati nella 2^ parte della routine);
- ovvero FINO a quando SommaDiBollettazioni dello specifico CodStock si riduce a 0(zero) (nel qual caso-ovviamente- potrebbero residuare quantità di TipoMovimento=11 non assorbite e che devono ,quindi, rimanere inalterate).

La 2^ parte della routine (sempre ciclica) deve prevedere che (finito il primo ciclo) eventuali RIMANENZE di SommaDiBollettazioni in TBL Bollettazioni dovranno essere sottratte (con la stessa procedura sopra descritta e sempre a parità di CodStock e dalla data più recente) dalle Quantità della TBL CronoMovimenti aventi ,PERO’, (in questo caso) il TipoMovimento = 1.
Così facendo le SommeDiBollettazioni si azzereranno tutte.
La procedura si conclude Eliminando (sempre a parità di CodStock) dalla TBL CronoMovimenti tutti i record con TipoMovimento = 11 e con quantità = 0

Io ho provato con varie query senza riuscirci: Capisco che è necessario una funzione ciclica in VBA, ma non sono proprio capace di realizzarla. A chi mi aiuta tanta tanta stima e tantissimi grazie.

12 Risposte

  • Re: Funzione Ciclica in VBA per Access 2007

    Serve sicuramente valutare una routine di VBA... ma non forniamo una consulenza di questo tipo... se avrai modo di apprendere le basi e provare a scriver e la routine poi il forum potrà, sul tuo codice, aiutarti a correggere eventuali errori concettuali... ma per quanto comprendo ora dovremmo scrivere tutto noi...?
  • Re: Funzione Ciclica in VBA per Access 2007

    La mia richiesta di AIUTO nasce dopo vari e infruttuosi tentativi di scrivere un qualcosa che funzionasse ed in presenza di una certa impellenza realizzativa. Indubbiamente (tempo permettendo) dovrei "studiare" di più, ma ritenevo, sbagliandomi, che le competenze e le capacità presenti in questo forum (al quale pure ho attinto per cercare di risolvere lo specifico e altri miei problemi) avessero potuto indicarmi almeno il "costrutto" del mio problema. Se questo non è possibile, ringrazio ugualmente per la ammirevole tempestività della risposta e comunque spero in qualche anima disponibile. Grazie
  • Re: Funzione Ciclica in VBA per Access 2007

    Se hai impellenza e non sai da dove iniziare, dato che l'aiuto che può dare il forum NON comprende la scrittura di codice completo, perché non ti rivolgi subito ad un professionista pagandolo ANCHE per l'urgenza?
  • Re: Funzione Ciclica in VBA per Access 2007

    Grazie per il prezioso consiglio !
  • Re: Funzione Ciclica in VBA per Access 2007

    DI nulla !
  • Re: Funzione Ciclica in VBA per Access 2007

    Salve ! Prima di tutto devo ringraziarvi per avermi dato stimolo a "studiare" di più . Batti e ribatti, con l'aiuto del Supporto specifico di Microsoft, sono riuscito a realizzare ciò che volevo: una public function perfettamente risolutiva del mio problema (se qualcuno ne dovesse aver bisogno per caso analogo: sono pronto a condividerla ). Ora posizionandomi nella funzione, quando l'avvio, gli archivi si aggiornano così come io voglio ! Ma ora devo inserire l'esecuzione della public function in una macro [EseguiCodice nome funzione Bollette()]. Però così mi rimedio un blocco "Impossibile trovare il nome di funzione immesso nell'espressione". Spero, per questo quesito, di non contravvenire alle regole del forum. Grazie in anticipo per la risoluzione che mi vorrete indicare.
  • Re: Funzione Ciclica in VBA per Access 2007

    Si condivide a prescindere ... per evitare che i lettori siano costretti a chiedere... questo è il modo di partecipare.
  • Re: Funzione Ciclica in VBA per Access 2007

    Fermo che non uso praticamente da un 20 anni access, da quanto intuisco hai una procedura che elabora i record uno per uno, cioè la più lenta in assoluto.
    se è così, non è il caso di ripensare il metodo che usi, giacchè con molti record temo sia davvero lentissimo ?
  • Re: Funzione Ciclica in VBA per Access 2007

    Purtroppo per me, si tratta di un DB realizzato circa 10 anni fa che, oggi, andrebbe "rinverdito" senza però "rimettere mano" al tutto. So che oggi Access risulta essere obsoleto per grandi quantità di dati, ma non ho possibilità (o volontà) di riprogettare il tutto con più performanti sistemi attuali. Quindi ci ho lavorato un pò su e mi rimane quel dubbio che ho espresso prima (EseguiCodice in una macro che lanci la Funzione pubblica). Cmq sempre grazie per avermi risposto !
  • Re: Funzione Ciclica in VBA per Access 2007

    La cosa si può fare ma prima dovresti spiegare il perchè di quello che chiedi in quanto se venisse eseguita la procedura, il che è abbastanza semplice, alla fine della stessa ti troveresti con ogni record, relativo al CodStock, in Bollettazioni il campo SommaDiBollettazioni a Zero ed in
    CronoMovimenti il campo Quantità a Zero senza quindi senza avere uno storico di tutti i movimenti.
  • Re: Funzione Ciclica in VBA per Access 2007

    L'obiettivo è proprio quello e la procedura lo fa egregiamente. Ora però il problema è che , avendo realizzato la procedura che mi soddisfa, non riesco a lanciarla dall'interno di una macro (EseguiCodice) anche se dalla Pagina dello script funziona. La Funzione è public e quindi funziona anche se la sottopongo (per intero) ad un "bottone" , ma non mi funzione se la richiamo da una macro (si blocca prima di avviarsi e mi chiede un nome macro). Perchè ?? Forse devo eliminare la riga a monte della procedura "option compare database" ?? Grazie per l'attenzione e per l'eventuale risposta.
  • Re: Funzione Ciclica in VBA per Access 2007

    Funziona tutto egregiamente... solo che non va... (scherzo ovviamente).
    Posta la dichiarazione della funzione(Non sub deve essere una Function se non erro...)... e come la chiami dalla macro... che purtroppo non conosco perché sono da evitare...
    Dovrebbe essere
    Macro...ESEGUICODICE
    =NomeFunzione()

    Ti avevo chiesto di condividere con il forum il codice che ne era uscito... potrebbe aiutare altri... perché non lo hai fatto...?
Devi accedere o registrarti per scrivere nel forum
12 risposte