Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]-Codice per far girare Macro una sola volta SE... Opzioni
aetio
Inviato: Saturday, November 24, 2012 10:59:03 AM

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
Sponsor
Inviato: Saturday, November 24, 2012 10:59:03 AM

 
a10n11
Inviato: Saturday, November 24, 2012 12:57:56 PM

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

aetio
Inviato: Saturday, November 24, 2012 1:16:17 PM

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
aetio
Inviato: Saturday, November 24, 2012 1:28:57 PM

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
aetio
Inviato: Saturday, November 24, 2012 6:30:42 PM

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
aetio
Inviato: Sunday, November 25, 2012 8:39:15 AM

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
a10n11
Inviato: Sunday, November 25, 2012 11:12:22 AM

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

aetio
Inviato: Sunday, November 25, 2012 12:17:17 PM

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

a10n11
Inviato: Monday, November 26, 2012 9:35:10 AM

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


aetio
Inviato: Monday, November 26, 2012 4:49:27 PM

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
a10n11
Inviato: Monday, November 26, 2012 6:51:26 PM

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


aetio
Inviato: Monday, November 26, 2012 8:52:17 PM

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

Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.