Condividi:        

Un codice in VBA per condizionare compilazione di celle

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Un codice in VBA per condizionare compilazione di celle

Postdi fantina » 19/12/08 14:05

Buondì,
ho un modulo in formato excel che spedisco e che mi viene ritornato compilato con dati anagrafici vari.
I compilatori omettono regolarmente un paio di campi che per me sono fondamentali quindi vorrei che non fossero in grado di salvare l'intero file in mancanza di questa compilazione. Ecco i dettagli dei vincoli:
1. ho una cella (unita, in posizione riga 5, colonne R:T) che i compilatori lasciano vuota: qui ho solo bisogno di obbligarli a compilarla
2. ho un'altra cella (unita, in posizione riga 9, colonne I:O) che viene sempre popolata ma a volte con 11 caratteri a volte con 16: solo in questo secondo caso vorrei creare l'obbligo a popolare una (qualunque) delle due celle predisposte una in riga 37/Col I l'altra in riga 39/Col I

C'è modo di subordinare il salvataggio di tutti gli altri dati al rispetto delle condizioni sopra?

Sarebbe un aiuto grandissimo! Grazie :)
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Sponsor
 

Re: Un codice in VBA per condizionare compilazione di celle

Postdi Anthony47 » 20/12/08 18:04

Userai una macro di tipo Workbook_BeforeSave (sul modulo ThisWorkbook), in cui farai i controlli, se Ok procedi col save, se nok emetti un messaggio e impedisci il save; qualcosa come:
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'controlla le varie situazioni di errore:
Mess="Errore su cella XYZ: deve essere nmop"   'Messaggio rellativo al controllo che vai a eseguire
If (ERRORE 1) then goto NoSalva
Mess="Errore su cella abc, inserire non so cosa"
If (ERRORE 2) then goto NoSalva
'...
' tutte le varie condizioni di errore
'
Exit sub               'Uscita se nessun errore, procedi con Salva
  NoSalva:
  msgbox(Mess)
  Cancel=true       'Cancella salvataggio
End Sub


Se vuoi essere generosa puoi anche inserire una macro di Worksheet_Change (sul modulo del foglio di lavoro) con cui, man mano che l' utente compila alcune celle, ricordi che e' necessario compilare anche le celle subordinate; una cosa analoga la puoi fare con Convalida, impostando una convalida assurda (tipo Numero compreso tra 12345 e 12346) e poi un messaggio di errore di tipo "Informativo" su che cosa e' necessario fare come prossimo step.

Mi pare che sei abbastanza autonoma, dovrebbero bastare questi spunti; se serve altro posta ancora.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Un codice in VBA per condizionare compilazione di celle

Postdi fantina » 22/12/08 20:48

grazie anthony, intanto ti confermo che ho ricevuto e mi ci sto debitamente picchiando. Mi ci picchio ancora un po' e se non torna tutto ti faccio sapere... :roll:
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Un codice in VBA per condizionare compilazione di celle

Postdi fantina » 29/12/08 14:27

Ciao Anthony ho aspettato che tu facessi in pace un po' di feste prima di tornare a rompere, non riesco ad applicare il codice che mi hai dato....
Però con Convalida come mi hai suggerito sono riuscita ad applicare molti avvisi e blocchi quindi ora mi rimane solo il problema della cella R5 che me la lasciano sempre vuota, spesso non viene neppure selezionata. Quindi ho bisogno che non salvino il file se R5 è vuota, con relativo messaggio di errore, ma mi dovresti rispiegare meglio il codice che mi hai dato.
Già che ci sei mi dici come proteggere le impostazioni di Convalida in modo che nessuno le modifichi e come assoggettare il codice a una password (o altro metodo di protezione) sempre per lo stesso scopo? Grazie infinite per la tua pazienza!
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Un codice in VBA per condizionare compilazione di celle

Postdi Anthony47 » 29/12/08 15:52

Molto generosa ad avermi dato qualche giorno di riposo... :lol:
Se il problema residuo e' R5 vuota potrebbe bastare questa:
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'controlla le varie situazioni di errore:
If Sheets("Foglio1").Range("R5").value<>"" then exit Sub     '<<< Verificare Nome Foglio
Mess="La cella R5 su Foglio1 non e' stata compilata; file NON  SALVATO"   
Cancel=true       'Cancella salvataggio
End Sub

Da mettere sul modulo di codice ThisWorkbook.
Tuttavia invece che il test di "vuoto" sarebbe meglio inserire il test di corretto valore in R5.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Un codice in VBA per condizionare compilazione di celle

Postdi fantina » 29/12/08 18:55

fatto e funziona, ma ancora mi manca un pezzo perchè il salvataggio ubbidisce perfettamente e non è possibile salvare il file ma il messaggio di alert non esce (ce la farò vedrai...)
Non posso vincolare R5 al dato corretto perchè è un'informazione che ha solo il compilatore, è un dato che fa parte di una tabella che lista quasi mille item: purtroppo posso solo fargli scrivere qualcosa, la validità di quel qualcosa non saprei come vincolarla.

Grazie!
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Un codice in VBA per condizionare compilazione di celle

Postdi Anthony47 » 29/12/08 21:01

In effetti il messaggio non esce perche' non c' e' l' istruzione: invece di Mess="La cella R5 su Foglio1 non e' stata compilata; file NON SALVATO" metti
Codice: Seleziona tutto
Msgbox("La cella R5 su Foglio1 non e' stata compilata; file NON  SALVATO")

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Un codice in VBA per condizionare compilazione di celle

Postdi fantina » 29/12/08 22:28

WOW!
Tutto a posto! grazie!
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Un codice in VBA per condizionare compilazione di celle

Postdi fantina » 29/12/08 22:42

:-? ... già, ma come lo salvo.... :eeh:
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Un codice in VBA per condizionare compilazione di celle

Postdi Anthony47 » 29/12/08 23:14

Ha ha ha...
Devi compilare anche tu R5!

Eventualmente potrai cancellare R5 all' apertura con
Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("Foglio1").Range("R5").clearcontents
End Sub
Ma attenta anche qui agli effetti collaterali

Oppure ti fai queste macro:
Codice: Seleziona tutto
sub uno()
Application.EnableEvents = False
end Sub

Sub due()
Application.EnableEvents = True
end Sub

Per salvare: lanci la macro "uno"; salvi; lanci la macro 2 per riabilitare gli eventi.

Oppure ancora:
In una cella segreta, es Z1, scrivi una frase segreta, es Salva!
Poi in testa alla tua macro Before_Save inserisci
Codice: Seleziona tutto
If Sheets("Foglio1").Range("Z1").value="Salva!" then exit Sub

E azzeri questa cella all' apertura con
Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("Foglio1").Range("Z1").clearcontents
End Sub


Basta.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Un codice in VBA per condizionare compilazione di celle

Postdi fantina » 02/01/09 12:35

Perfetto Anthony, ho optato per il secondo comando. Grazie infinite!
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24


Torna a Applicazioni Office Windows


Topic correlati a "Un codice in VBA per condizionare compilazione di celle":


Chi c’è in linea

Visitano il forum: Nessuno e 87 ospiti

cron