› Excel e gli applicativi Microsoft Office › Le formule Excel ogni tanto si annullano
-
AutoreArticoli
-
Buongiorno a tutti.
Avrei questo strano problema. Ho creato un sistema di invio schede a un database collegato in rete locale.
Il problema è nel file che spedisce i dati. Funziona perfettamente, ma se ci metto le mani per qualche miglioria dà sempre gli stessi strani problemi. Infatti contiene delle formule, anche semplicissime, che di colpo non funzionano più.
Allego il file. Ci sono 2 schede: "Scheda" e "Preparazione invio".
In "Scheda" si compilano i campi (che sono azzurri) e in "Preparazione invio" vengono ordinati in un record che poi sarà inviato al database.
1.
Gli errori sono nella riga 5 di "Preparazione invio" che dovrebbe riportare i campi dell'altra scheda ma non lo fa più. Casi tipici di errore sono le celle G5 e G13 di "Preparazione invio".
2.
Altro tipo di errore in riga 7 sempre di "Preparazione invio", che dovrebbe controllare se i campi in riga 5 sono pieni o vuoti, ma li legge pieni sempre. Ad esempio H7 funziona, G7 invece no.
3.
Infine, quello che funzione, funziona solo salvando il file.
Spero che il tutto non sia dovuto alla complessità della macro che invia i dati collegata al pulsante "INVIA DATI".
Grazie mille a chi mi può aiutare!
Allegati:
You must be logged in to view attached files.Ciao
Punto n.1
Se guardi la riga 5 del Foglio "Preparazione invio" potrai notare che dalla col.C in poi contengono una formula che fa riferimento ad una determinata cella del Foglio "Scheda"; ho detto "quasi" tutte perchè la cella E5 non ha alcun riferimento (dovrebbe esserci: =Scheda!XN cioè lettera e numero della cella interessata) mentre la cella S5 (e non G13) riporta: =Scheda!R12 ma la cella è formattata come testo e quindi non fa riferimento ad alcunchè.
Punto n.2
Secondo me funzionano tutti regolarmente "se hanno dentro una formula". Infatti le celle C7, E7 ed AV7 non funzionano semplicemente perchè dentro non c'è alcuna formula.
Stesso problema lo riscontri alla riga 9 per quelle celle che non hanno all'interno alcuna formula.
Punto n.3
Non capisco cosa intendi.
Ciao,
Mario
Al punto 3 rispondo io perchè ho capito 😛
Nel file è impostato il ricalcolo manuale; mettilo automatico e vedrai che i dati si aggiornano al momento della modifica e non solo salvando il file. Anzi questa precisazione forse risolve anche gli altri errori (che quindi sono solo apparenti).
Poi in realtà la struttura del secondo foglio mi sembra poco lineare, ma ricordo che ne avevamo già parlato 🙂
Ciao Mario e grazie per le risposte!
Per quanto riguarda la cella formattata come testo è vero. Infatti questo era un errore nuovo. L'ho formattata non come testo ed è ok.
Per il resto:
Nella riga 5 in alcune celle c'è la formula e in altre no per scelta, ma a volte funzionano a volte no. Per esempio il campo G5 è vuoto: quindi G7 dovrebbe dare 1, come il campo H7. Puoi verificare che anche in altri campi è così modificando in "Scheda", ma poi bisogna salvare per gli aggiornamenti (questo fatto è quello a cui mi riferivo nel punto 3.)
Grazie!
il campo G5 è vuoto
La cella non è vuota. C'è una formula dentro. Comunque prova a eseguire il test sul valore di una stringa nulla, non sul valore zero (visto che in G5 c'è del testo):
G7: =SE(G5="";1;0)Ciao
ma hai letto cosa ha scritto Vecchio frac (un caro saluto)?
Nel tuo codice ci sta una riga con
.Calculation = xlCalculationManual
che ad un certo punto diventa
.Calculation = xlCalculationAutomatic
Non credo siano necessarie quelle due righe (dipende dalla "pesantezza" del file). Prova a metterci un apice singolo davanti ad ognuna e vedi se funzionano sempre.
Ovviamente prova sempre su una copia, MAI SULL'ORIGINALE.
Ciao,
Mario
Grazie vecchio frac!
Era fastidioso. Ho imparato una cosa nuova, non sapevo del ricalcolo automatico. Sistemato.
Però gli errori non erano apparenti purtroppo. Salvavo sempre per aggiornare.Per la poca linearità non saprei ... se causa problemi ed errori mi preoccupo, se comunque sta in piedi mi accontento.
Dunque. Lo so che non è vuota e che c'è una formula, ma due osservazioni:
- anche H5 è vuota però H7 dà "1"
- fino a ieri funzionava

Sì Mario questo è a posto, nessun problema.
Forse abbiamo scritto in contemporanea.
Grazie.
anche H5 è vuota però H7 dà "1"
Sì, perchè H5 non è vuota, e il suo formato personalizzato la costringe a indicare un trattino considerato che mentre G5 converte il proprio valore in maiuscolo, H5 non lo fa. Prova, per coerenza, a inserire le stesse formule:
H5: =MAIUSC(Scheda!V4) H7: =SE(H5="";1;0)Sì Vecchio frac ero appena giunto empiricamente anch'io alla stessa conclusione.
A questo punto la domanda è: perchè prima funzionava però?
Probabilmente non funzionava neanche prima, me lo sarò sognato.Stasera me ne accerto usando altri file identici che funzionano.
Se, come probabile, è proprio così come dici tu, c'è un sistema per ottenere lo scopo mantenendo la personalizzazione del formato?
Grazie!
Ma perchè invece di tutto l'ambaradan con i numeri di controllo sulle celle compilate non fai direttamente il controllo via codice?
With ThisWorkbook With .Worksheets("Preparazione invio") For Each r In Range("B5:AY5") If r = "" Then MsgBox "Attenzione! Compilare tutti i campi obbligatori. Evidenzio il campo non compilato ", vbExclamation, "Campi obbligatori mancanti" r.Select Exit Sub End If Next End With End WithComunque il formato personalizzato strano di G5 e H5 c'entra poco col fatto che le due celle suddette mostrano comunque zero anche se si riferiscono a celle col formato testo. Non è chiaro perchè fin a ieri funzionasse tutto.
Ti capisco perfettamente.
Il motivo è molto semplice: sono bravo in excel, ho molta fantasia nel gestire le formule e non sono capace di usare in modo accettabile VBA. Quindi mi devo arrangiare in modo un po "artigianale".
Non so riguardo al formato personalizzato, ma ho fatto delle prove ed effettivamente se c'è solo "copia la cella" funziona, col formato personalizzato no.
E poi ho controllato non ha mai funzionato da quando ho aggiunto la personalizzazione, era impressione mia, perchè le celle "dimenticate vuote" dagli utenti sono sempre quelle non personalizzate.
Detto questo visto che mi hai dato il codice. Ci provo!
Grazie!
Però non deve controllare tutti i campi ma solo alcuni. La soluzione più semplice presumo che sia fare una riga sotto (a cui punta il codice) che copia sopra solo i campi che mi interessano. Due osservazioni:
1. Mi dice "Errore di compilazione." "Variabile non definita" Evidenziando "r"
2. Il codice non evidenzia il nome del campo non compilato vero?
L'ho dichiarata io:
Dim r As Object (giusto?)
Perchè c'è un po' di tutto in quei campi.
Pare funzioni. Ora trovo il modo di evidenziare il nome dei campi
non funziona vecchio frac.Legge sempre qualche campo non compilato, anche se sono tutti compilati ...
La variabile r va dichiarata come Range, non come Object. Nella definizione del range puoi dire solo quali celle devono essere controllate (ad esempio For Each r in Range ("B5, D5, F5, H5"), eccetera).
r.Select selezionerà il primo campo non compilato.
Legge sempre qualche campo non compilato, anche se sono tutti compilati .
Bisogna verificare qual è la condizione che controlla la "vuotità" di un campo 🙂
Ciao a tutti
Bisogna verificare qual è la condizione che controlla la "vuotità" di un campo
Mi piace "vuotità"
Ciao,
Mario
Perfetto vecchio frac!
Dichiarerò la variabile come Range e specificherò i campi. Ottimo, grazie.
Una curiosita: r.Select come seleziona il campo, con le coordinate riga e colonna?
Una curiosita: r.Select come seleziona il campo, con le coordinate riga e colonna?
La variabile "r" in quanto dichiarata di tipo Range, ne acquista tutti gli attributi, compresi Row e Column (una cella è identificata da riga e colonna). Accade quindi che di volta in volta a "r" tu attribuisci un range specifico, ad esempio Range("A1"), e lo puoi selezionare con Select.
-
AutoreArticoli
