|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, spesso le macro che ho inserito nei file delle mie tabelle aggiornano il dataBase. A volte succede che, data la moltitudine dei file (e delle tabelle...), si rilanci una macro già girata con il conseguente errore, scriviamo pure erroraccio, di inserire due volte gli stessi dati. Vorrei inserire in una macro molto importante un codice che rilevi un numero scritto in cella A3 (scritto nella forma tipo NUMERO APICE NUMERO, quindi numero prima dell'apice e numero dopo l'apice) e che, se fatta rigirare, rileggendo quel numero ne impedisca un nuovo utilizzo. E' fantaVBA o è una cosa fattibile? Grazie assai e buona giornata, eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve dovrebbe bastare che all'inizio della macro inserisci una riga tipo questa: If cells(1,3).value = "il tuo valore di controllo" then exit sub rimane da sapere come gestire il valore di cella A3 saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto: rimane da sapere come gestire il valore di cella A3
il valore di cella A3 viene inserito all'aggiornamento del file, in base al dataBase fornito dai magazzini di competenza. E' di fondamentale impotanza, però, che i nuovi dati vengano inseriti (via macro dedicate) nelle relative tabelle UNA VOLTA SOLA. I limiti umani a volte giocano brutti scherzi... e quei dati (a onor del vero a causa della loro quantità) a volte vengono inseriti un'altra volta, causando gravi errori in fase di lettura dei dati di volta in volta interpretati operando su quelle tabelle... Grazie infinite, corro immediatamente a inserire il codice nelle macro di competenza, se riscontro stranezze ti faccio sapere. Buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
EDIT Scusa, rileggendo meglio: l'istruzione "il tuo valore di controllo" varia in base alle tabelle di aggiornamento, per cui non glielo devo scrivere manualmente io di volta in volta. Lo scopo del codice di limitazione della macro dev'essere, in parole povere, questo: se il valore scritto in cella A3 (che varia di volta in volta in base agli aggiornamenti) è già stato importato mediante la macro stessa- quindi la macro lo riconosce, magari con un'istruzione che se lo autocrive (la prima volta che lo importa nella tabella di competenza) nel suo modulo per poterlo poi riconoscere- NON rieseguire la macro. ESEMPIO: Sono pervenuti gli aggiornamenti, per cui a ns. volta aggiorniamo i dataBase delle ns. tabelle. Quindi nelle tabelle, in cella A3, la macro importa il codice- esempio...- 87'137 che è l'identificativo univoco(non vi sono doppioni, ecco perché mi interessa la cella A3). Servirebbe un'istruzione che permetta alla macro, se rieseguita per errore, di riconoscere che quell'aggiornamento l'ha già eseguito... per cui non si riesegue un'altra volta (come invece il pollo umano a volte fa...)
Apposta ho scritto "se è fantaVBA", forse non si puo' osare così tanto...!! ;)) Grazie assai, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, ho risolto momentaneamente il problema in modo "villano": Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.Goto Reference:="nomemacro" End Sub che prima della chiusura del file apre il modulo in cui è inserita la riga If cells(1,3).value = "il tuo valore di controllo" then exit sub e ivi aggiorno il codice di cella A3 ("il tuo valore di controllo")... In tal modo se la macro ha già fatto l'aggiornamento, non si riesegue più
Se però esiste un modo "tecnico" appropriato è sicuramente il benvenuto!! :)) Grazie assai e buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, la soluzione momentanea e "villana" che ho sopra illustrato non è praticabile, almeno dal mio punto di vista: dovrebbe servire a evitare il reinserimento di dati già inseriti, ma in realtà- nuda e cruda- introduce una ulteriore pericolosa azione manuale (col rischio di refusi). E' stata quindi immediatamente scartata. Grazie assai e buona giornata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve non puoi inserire un controllo nella macro che importa i dati? Controlla prima dell'importazione se il valore della cella A3 corrisponde al valore che è presente nei dati da importare. Come e da dove importi i dati? saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: non puoi inserire un controllo nella macro che importa i dati? Controlla prima dell'importazione se il valore della cella A3 corrisponde al valore che è presente nei dati da importare. Come e da dove importi i dati?
il mio problema non è l'importazione dei dati, è la possibilità che, una volta eseguito il ns. aggionamento, venga accidentalmente rieseguito generando un gigantesco errore nella successiva interpretazione dei dati... Servirebbe un'istruzione all'interno della macro che, ogni volta che quella macro di aggiornamento venga fatta partire, importi nel proprio modulo il codice scritto in cella A3 delle tabelle (è quello per tutte le tabelle di quell'aggiornamento, quindi non vi potrebbero essere doppioni). Al prossimo utilizzo della macro, se in cella A3 delle tabelle da sottoporre ad aggiornamento vi fosse scritto lo stesso codice presente nel modulo, quello precedentemente importato nel modulo della macro all'atto dell' aggiornamento (aggiornamento già eseguito, quindi) la macro non si eseguirebbe... I dati sono forniti dalla sede centrale, li importo direttamente dalle loro informative e sono file in formato excel, ma quelli non ci danno il minimo problema. Grazie infinite per la pazienza, buona giornata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao,
il mio problema non è l'importazione dei dati, è la possibilità che, una volta eseguito il ns. aggionamento, venga accidentalmente rieseguito generando un gigantesco errore nella successiva interpretazione dei dati... Servirebbe un'istruzione all'interno della macro che, ogni volta che quella macro di aggiornamento venga fatta partire, importi nel proprio modulo il codice scritto in cella A3 delle tabelle (è quello per tutte le tabelle di quell'aggiornamento, quindi non vi potrebbero essere doppioni). Al prossimo utilizzo della macro, se in cella A3 delle tabelle da sottoporre ad aggiornamento vi fosse scritto lo stesso codice presente nel modulo, quello precedentemente importato nel modulo della macro all'atto dell' aggiornamento (aggiornamento già eseguito, quindi) la macro non si eseguirebbe... I dati sono forniti dalla sede centrale, li importo direttamente dalle loro informative e sono file in formato excel, ma quelli non ci danno il minimo problema. Grazie infinite per la pazienza, buona giornata eZio
salve prelevare il valore della cella A3 e inserirlo in una variabile mi pare non abbia un gran senso. Mi pare più consono controllare il valore della cella A3 affidando l'incarico alla macro che esegue l'importazione. bisognerebbe vedere la macro che usi per l'importazione dei dati. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto: prelevare il valore della cella A3 e inserirlo in una variabile mi pare non abbia un gran senso. Mi pare più consono controllare il valore della cella A3 affidando l'incarico alla macro che esegue l'importazione. bisognerebbe vedere la macro che usi per l'importazione dei dati.
...Infatti, non ha un gran senso. Onde evitare ulteriori complicazioni (della serie: spesso si annega in un bicchier d'acqua) ho semplicemente impostato un contatore incrementale che ha lo stesso codice dell'aggiornamento: se si legge lo stesso codice dell'aggiornamento, è già stato fatto... altrimenti NO :) Grazie infinite, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto: ...Infatti, non ha un gran senso. Onde evitare ulteriori complicazioni (della serie: spesso si annega in un bicchier d'acqua) ho semplicemente impostato un contatore incrementale che ha lo stesso codice dell'aggiornamento: se si legge lo stesso codice dell'aggiornamento, è già stato fatto... altrimenti NO :) Grazie infinite, buona serata eZio
Salve continuo a far fatica a comprendere il problema. se il codice in A3 è un codice che importi dalla tabella esterna, non fai prima a confrontare i valori reciprochi dei due file? probabilmente affronto il problema da un punto di vista non corretto. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: continuo a far fatica a comprendere il problema.
se il codice in A3 è un codice che importi dalla tabella esterna, non fai prima a confrontare i valori reciprochi dei due file? probabilmente affronto il problema da un punto di vista non corretto.
E' molto difficile da spiegare in poche e semplici parole... Per poter maneggiare in modo veloce, sicuro, "leggero" le mie tabelle ho studiato un sistema che riesca a mantenesre nel file solo gli elementi essenziali, che contraddistinguono ciascuna tabella. Per dare un'idea: tutta l'informatica sta insieme e poggia sugli infiniti cocktails tra 0 e 1. Allo stesso modo un file che tradizionalmente peserebbe 2MB col mio sistema pesa sì e no 180KB :)) Va da sé che in cella A3 dei miei file non c'è scritto nulla, ma contiene tutti gli elementi che permettono- una volta importata la tabella di competenza- di trattare quella tabella in modo esatto... Ecco che quindi mi occorre un dato che risieda nel Caronte che traghetta i dati nel mio Ade [ :-)) ] -la macro- super-partes e imparziale, che impedisca di lavorare due volte dei dati già aggiornati e pronti, andando in tal mdo a contaminarli e modificarli... Non è facile da risolvere, ne sono consapevole... pensavo che il VBA potesse contemplare anche l'importazione nel modulo di dati scritti, tali e quali, e non solo sotto forma di cells(1,3).value. Grazie infinite per l'immensa pazienza nel darmi retta, buona serata eZio
|
|
Guest |