› Sviluppare funzionalita su Microsoft Office con VBA › Chiudere direttamente userform se non viene fatta nessuna modifica
-
AutoreArticoli
-
Salve ragazzi
Ho un userform che se non faccio nessuna modifica hai 5 fogli , al comando di uscita vorrei che si chiudesse immediatamente senza nessun avviso , se invece modifico un qualunque dei 5 foglio , mi deve dare il messaggio salva
Aggiungo le modifiche vengono sempre fatte da userform no da tastiera
Grazie a tutti
Allegati:
You must be logged in to view attached files.Prova modificando l'evento UserFrom_QueryClose così:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then If ThisWorkbook.Saved Then If Workbooks.Count > 1 Then ThisWorkbook.Close False Else Application.Quit End If Else Uscita End If End If End SubCiao Alex
Grazie per il tuo intervento
Se chiudo dalla X della form va benissimo , ma se chiudo da puylsante non mi va
Ha ho capito sembra che vada bene , poi ti farò sapere con più prova
Grande
Ciao,
io cambierei così la tua sub Uscita:
Sub Uscita() Beep If ThisWorkbook.Saved Then ThisWorkbook.Close Else Dim Risposta As Integer Risposta = MsgBox("Salvare i cambiamenti del File : " & Nuovo1, vbYesNoCancel + vbQuestion, "Conferma") If Risposta = vbYes Then Application.DisplayAlerts = False ThisWorkbook.Close savechanges:=True End If If Risposta = vbNo Then Application.DisplayAlerts = False ThisWorkbook.Close savechanges:=False End If If Risposta = vbCancel Then 'Annulla End If End If End Subn.b.: ho tolto tutti gli Application.Quit, lo trovo deprecabile, se vuoi aggiungilo (ma solo dopo i vari ThisWorkbook.Close).
P.S.: non offenderti, ma mi spieghi come fai a scrivere il codice in quel modo così disordinato e male indentato?
Ciao Scossa
Funziona benissimo
Poi qundo la applico al programma ti farò sapere perchè prima non l'ho specificato bene , i fogli sono Foglio1,Foglio2,Foglio3,Foglio4,Foglio6 E il Foglio5 deve saltarlo , in ogni modo il foglio5 viene poco utilizzato anche se non lo salta pazienza
Bravo e grazie 1000
io cambierei così la tua sub Uscita:
Sub Uscita() Beep If ThisWorkbook.Saved Then ThisWorkbook.Close Else Dim Risposta As Integer Risposta = MsgBox("Salvare i cambiamenti del File : " & Nuovo1, vbYesNoCancel + vbQuestion, "Conferma") If Risposta = vbYes Then Application.DisplayAlerts = False ThisWorkbook.Close savechanges:=True End If If Risposta = vbNo Then Application.DisplayAlerts = False ThisWorkbook.Close savechanges:=False End If If Risposta = vbCancel Then 'Annulla End If End If End Subn.b.: ho tolto tutti gli Application.Quit, lo trovo deprecabile, se vuoi aggiungilo (ma solo dopo i vari ThisWorkbook.Close).
P.S.: non offenderti, ma mi spieghi come fai a scrivere il codice in quel modo così disordinato e male indentato?
Ma figurati se mi offendo io non sono mica un genio come tè e Alex
Quel codice era già scritto , ma non utilizzabile , lo avevo messo per un esempio , mi bastava capire come dovevo fare poi dopo lo applico al programma
In ogni modo l'userform che devo chiudere è la schermata iniziale del programma , che alla chiusura si chiude tutto , quindi sarò obbligato a usare application.quit
Ho un userform che se non faccio nessuna modifica hai 5 fogli , al comando di uscita vorrei che si chiudesse immediatamente senza nessun avviso , se invece modifico un qualunque dei 5 foglio , mi deve dare il messaggio salva
alternativa aenza macro Uscita
Public sh_change As Boolean Private Sub Workbook_Open() sh_change = False End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) sh_change = True End Sub '****************************** Public sh_change As Boolean Private Sub CommandButton1_Click() For i = 1 To 10 Cells(i, 1) = i Next sh_change = True End Sub Private Sub CommandButton2_Click() 'Uscita If sh_change = True Then Application.DisplayAlerts = True ThisWorkbook.Close Else Application.DisplayAlerts = False Application.Quit End If End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If sh_change = True Then Application.DisplayAlerts = True ThisWorkbook.Close Else Application.DisplayAlerts = False Application.Quit End If End SubQuel codice era già scritto , ma non utilizzabile , lo avevo messo per un esempio , mi bastava capire come dovevo fare poi dopo lo applico al programma
Non mi riferivo alla funzionalità del codice ma all'aspetto "estetico": con quelle righe che iniziano dove capita, davvero inguardabile
, basta poco impegno per metterlo in ordine e renderlo più leggibile e ne guadagna la facilità di comprensione.rivista
Public sh_change As Boolean Private Sub CommandButton1_Click() For i = 1 To 10 Cells(i, 1) = i Next sh_change = True End Sub Private Sub CommandButton2_Click() If sh_change = True Then ThisWorkbook.Close Application.DisplayAlerts = True Else Application.DisplayAlerts = False Application.Quit End If End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If sh_change = True Then ThisWorkbook.Close Application.DisplayAlerts = True Else Application.DisplayAlerts = False Application.Quit End If End SubHo provato ad applicare le vostre macro al mio programma , entrambi vanno , ma non fanno quello che dovrebbero, mi spiego meglio
Cosa dovrebbe fare;
Lancio il mio programma , si apre un'userform a tutto schermo , sotto ci sono diversi fogli , ma solo 5 possono essere modificati
all'avvio questi 5 fogli caricano alcune informazioni generali , ora passiamo all'userform , ha diversi pulsanti in base alla loro funzionalità , ma consideriamo di averne solo 3 , uno = Nuovo che pulisce i 5 fogli , il secondo = Apri File , che si apre una finestra di dialogo dove seleziono un File .Txt da aprire che viene suddiviso nei 5 fogli in base alle informazione , il terzo dicciamo modifica ,
quindi se apro un nuovo File , se in quello già aperto non ho fatto nessuna modifica , si deve aprire direttamente la finestra di dialogo Apri , se invece ho fatto qualche modifica a uno dei 5 foglio , si deve aprire la finestrina di dialogo Salva Non salvare o Annulla , una volta salvato il File in .Txt si apre la finestra di dialogo Apri che seleziono un nuovo File
risultato la finestrina di dialogo Salva Non salvare Annulla , si apre sempre ,fin quì tutto chiaro
Quello che fa
Lanciato il programma , se creo un nuovo File ,poi faccio Apri File va tutto bene , si apre la finestrina Salva Non salvare Annulla poi la finestra di dialogo Apri File
(I fogli del programma non non vengono mai salvati , viene sempre solo salvato File In .Txt)
Stasera se riesco o la massimo domattina allego un nuovo esempio piu definito , con apri file Nuovo e Modica e un File .Txt da aprire
Per ora vi ringrazio tanto scossa e Alex
al di là delle tue ultime delucidazioni sul tuo obiettivo,
cosa ne dici di quanto ho proposto #46161?
al di là delle tue ultime delucidazioni sul tuo obiettivo,
Ciao fsm scusa se non ti ho ancora risposto , ma solo perchè non l'ho ancora provato , volevo prima provarlo poi ti faccio sapere Grazie 1000 per il tuo consiglio
come fai a scrivere il codice in quel modo così disordinato e male indentato?
Be' se nessuno ti spiega come fare e perche' farlo, e' difficile che uno si inventi di indentare e tenere ordinato.
[joke on]
Per questo consiglio di passare a python dove l'indentatura errata produce errore di sintassi... ops, scossa detesta python dimenticavo
[joke /off]
fsm ho provato funziona anche lui , ma non fa quello che mi serve o almeno non riesco io ad adattarlo
ho allegato un nuovo esempio dove spiega meglio cosa deve fare
Ho aggiunto anche un File.Txt
apro il File.Txt , se non eseguo nessuna modifica sui Fogli , chiudo , il programma si chiude senza fare nulla , se faccio qualche modifica mi deve chiedere di salvare il File.Txt
La stessa funzione è uguale se faccio Nuovo o Apri File o Uscita
IL Foglio di Excel non deve mai essere modificato
Allegati:
You must be logged in to view attached files.Be' se nessuno ti spiega come fare e perche' farlo, e' difficile che uno si inventi di indentare e tenere ordinato.
[joke on]
Per questo consiglio di passare a python dove l'indentatura errata produce errore di sintassi... ops, scossa detesta python dimenticavo
[joke /off]
Non è questione che nessuno mi abbia insegnato , è solo perchè la macro l'ho ritenuta inutile , quindi era inutile ordinarla
a parte il fatto che non sono mai stato tanto bravo ad ordinare le macro (non mi è mai piaciuto)
non sono mai stato tanto bravo ad ordinare le macro
Prova con Glovo (Amazon e' lento)
fsm ho provato funziona anche lui , ma non fa quello che mi serve o almeno non riesco io ad adattarlo
certo, se continui a cambiare lo scenario, nessuna soluzione che ti verrà proposta,
sarà quella idonea
Prova con Glovo (Amazon e' lento)
Ci proverò grazie del consiglio
Per il momento Resto in attesa!!!! di questa soluzione.........................
certo, se continui a cambiare lo scenario, nessuna soluzione che ti verrà proposta,
sarà quella idonea
Ma lo scenario è sempre lo stesso , avevo chiesto per l'uscita perchè alla fine il codice va bene per le diverse opzioni ,uscita , nuovo , o apri , la funzione è sempre la stessa
Quello che non avevo specificato bene era che andava salvato solo il File.Txt e non il foglio di Excel
certo, se continui a cambiare lo scenario, nessuna soluzione che ti verrà proposta,
sarà quella idonea
Ciao fsm nel titolo c'era scritto uscita da userfom , non ho cambiato senario
Ringrazio tutti per il vostro impegno
Be' se nessuno ti spiega come fare e perche' farlo, e' difficile che uno si inventi di indentare e tenere ordinato.
Quasi quasi dissento
: basta aver letto con attenzione e curiosità un po' di codici postati da certi utenti per "percepire" una certa differenza nella facilità di lettura (e perlomeno di comprensione del flusso del codice) di uno "stile" rispetto ad un altro.Poi, ovviamente, dall'altra parte serve la buona volontà e l'interesse di mettere in pratica.
Quasi quasi dissento
Ma mi sembrava strano il contrario
Io comunque ho imparato cosi', guardando i codici altrui e cercando di imitare gli stili di scrittura migliori. Confermo e quoto tutta l'osservazione di scossa anche se comunque uno potrebbe non dare importanza alla forma ma al contenuto ("l'importante e' che funzioni"...)
anche se comunque uno potrebbe non dare importanza alla forma ma al contenuto
Sono d'accordo se il lavoro lo fai per te e ti arrangi, ma se vai dal medico romano e gli spieghi il tuo problema in dialetto bergamasco poi non lamentarti se invece del viagra ti prescrive il proctolin!
ROTFL ma come ti vengono?
Anche qui ci vuole quella bella icona rotolante che ogni tanto ci elargisce Albatros
-
AutoreArticoli
