Condividi:        

Workbook_BeforeSave

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

Workbook_BeforeSave

Postdi zanatta77 » 22/01/15 22:28

Buonasera
avrei bisogno di un aiuto nel compilare quanto segue;
In un workbook condiviso vorrei ogni qualvolta viene premuto il tasto salva predefinito di Excel un autorizzazione al salvataggio questo script che inserisco è quello che ho provato a fare :roll: ma alla chiusura del file mi chiede sempre di salvare nuovamente
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Message, Title, Default, MyValue As String
Message = "Controllo Autorizzati" '
Title = "Autorizzazione al salvataggio"
Default = " INSERISCA IL CODICE "
MyValue = InputBox(Message, Title, Default)
If MyValue = "CCCAAA" Then
Cancel = True
Else
ActiveWorkbook.Close
End If
End Sub


Oltre a quanto chiesto per sicurezza vorrei salvare anche una copia sul desktop, tipo questo
Codice: Seleziona tutto
ActivateWorkbook .SaveAs "C:\Users\Minni\Desktop"


Quindi riassumendo il tutto vorrei che con il click su pulsante salva di Excel verifichi se autorizzato,ed in caso affermativo, avviene salvataggio dove si trova il file condiviso e in più anche sul Desktop-
Grazie
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Sponsor
 

Re: Workbook_BeforeSave

Postdi Flash30005 » 23/01/15 00:49

Penso che modificata così possa funzionare secondo la tua esigenza anche se reputo pericolosa la funzione di chiusura
(dovuto a errore umano di un autorizzato"

Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Message, Title, Default, MyValue As String
Message = "Controllo Autorizzati" '
Title = "Autorizzazione al salvataggio"
Default = " INSERISCA IL CODICE "
MyValue = InputBox(Message, Title, Default)
If MyValue = "CCCAAA" Then
Application.EnableEvents = False
    ActiveWorkbook.Save
    Application.EnableEvents = True
Else
    MsgBox "Codice errato, impossibile salvare il file"
    Cancel = True
    ActiveWorkbook.Close savechanges:=False  '<<< Funzione pericolosa perché chiude il file senza salvarlo
End If
End Sub
ù


Inoltre per salvare il file anche su desktop usa questa riga codice da inserire dove pensi che debba fare questo salvataggio
Codice: Seleziona tutto
ActiveWorkbook.SaveAs "C:\Users\" & Environ("userName") & "\Desktop\" & "Mio.xls"


Sostituisci il nome "Mio.xls" con il nome del file che vuoi salvare sul desktop

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Workbook_BeforeSave

Postdi zanatta77 » 23/01/15 06:54

Grazie !!
Ho provato ad usarlo varie volte facendo salva e ogni volta dopo il primo utilizzo che avviene in modo regolare mi da un errore.
L'errore che mi segnala è questo
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(Cancel As Boolean)

Inizialmente il codice inserito era questo
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ma dopo il primo salvataggio in automatico se apro il file e vado in visual basic mi ritrovo nel modulo lo script con la dichiarazione della sub cambiato come ti ho riportato sopra. In pratica elimina questa parte di codice in modo automatico
Codice: Seleziona tutto
ByVal SaveAsUI As Boolean,
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Workbook_BeforeSave

Postdi zanatta77 » 23/01/15 07:11

Scusami per quanto segnalato :oops: l'errore riportato sopra me lo da quando inserisco il mio SCRIPT con il tuo il problema non sorge.
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Workbook_BeforeSave

Postdi Anthony47 » 23/01/15 14:06

Anche io sconsiglio il ".Close" in caso di codice errato su File/Save; sostituirei pertanto la riga ActiveWorkbook.Close savechanges:=False con ThisWorkbook.Saved = True che lascia il file aperto senza salvarlo.

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

Re: Workbook_BeforeSave

Postdi Zer0Kelvin » 24/01/15 12:32

Anthony47 ha scritto:Anche io sconsiglio il ".Close" in caso di codice errato su File/Save; sostituirei pertanto la riga ActiveWorkbook.Close savechanges:=False con ThisWorkbook.Saved = True che lascia il file aperto senza salvarlo.
Ciao
salve a tutti.
Mi associo a quanto sopra, e aggiungo che per annullare il salvataggio è anche possibile impostare
Codice: Seleziona tutto
Cancel = True

Inoltre, per salvare una copia sul Desktop, sarebbe meglio utilizzare il metodo Workbook.SaveCopyAs al posto di Workbook.Save, che sostituisce completamente il riferimento al file corrente.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Workbook_BeforeSave

Postdi Anthony47 » 24/01/15 23:17

Z0°K non ha voluto dire che ho suggerito una mezza cavolata, cosi' lo devo dire io... La (mezza?)cavolata sta' nel fatto che se non si chiude il file nella macro, come appunto avevo suggerito, allora non solo "sarebbe meglio" ma e' obbligatorio usare Workbook.SaveCopyAs per salvare (una copia!) sul desktop, altrimenti (usando ActiveWorkbook.SaveAs) da quel momento il file non sara' piu' salvato (se l' utente fa ulteriori modifiche /salvataggi) nel percorso originale creando due file con stesso nome ma diverso contenuto... Grave, no?

Quanto al annullare il salvataggio con "Cancel = True", questa istruzione e' gia' presente nella macro suggerita da Flash; comunque ThisWorkbook.Saved = True fa una cosa diversa, e cioe' non fa emergere il messaggio "Vuoi salvare il file?" quando poi si cerchera' di chiuderlo dall' interfaccia utente.

Ciao a tutti!
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Workbook_BeforeSave

Postdi zanatta77 » 26/01/15 06:18

Essendo la macro fatta, in play quando premo l'icona salva predefinita di Excel( .ico archivia blu) non capisco la differenza se inserisco l'uno o l'altro che cambia :?:
Codice: Seleziona tutto
ActiveWorkbook.SaveAs
= salva cartella attiva nella seguente directory

Codice: Seleziona tutto
Workbook.SaveCopyAs
= salva una copia della cartella nella seguente directory

Inserendo l'una o l'altra e premo salva entrambe con la macro fanno quanto richiesto, se faccio ulteriori modifiche e salvo ancora entrambe fanno quanto richiesto e trovando nella directory il Workbook precedende mi esce il messaggio vuoi sostituire il file ecc ecc non ho capito cosa vuol dire se non si chiude il file nella macro ??? :roll:
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Workbook_BeforeSave

Postdi ricky53 » 26/01/15 13:59

Ciao
".SaveAs" salva il file sul quale stai lavorando con il nome che hai scritto tu, le modifiche ultime saranno solo sul nuovo nome, il file prima del salvataggio NON conterrà le modifiche fatte e NON lo vedrai tra i file "aperti" !

".SaveCopyAs" salva una "Copia" del file sul quale stai lavorando (ovviamente con tutte le modifiche e macro e il file attivo NON viene salvato ma rimane "aperto".
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows

Chi c’è in linea

Visitano il forum: Nessuno e 70 ospiti