Sviluppare funzionalita su Microsoft Office con VBA Chiudere direttamente userform se non viene fatta nessuna modifica

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 33 totali)
  • Autore
    Articoli
  • #46129 Score: 0 | Risposta

    Oscar
    Partecipante
      45 pts

      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.
      #46136 Score: 0 | Risposta

      alexps81
      Moderatore
        58 pts

        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 Sub
        
        #46138 Score: 0 | Risposta

        Oscar
        Partecipante
          45 pts

          Ciao Alex

          Grazie per il tuo intervento

          Se chiudo dalla X della form va benissimo , ma se chiudo da puylsante non mi va

          #46139 Score: 0 | Risposta

          Oscar
          Partecipante
            45 pts

            Ha ho capito sembra che vada bene , poi ti farò sapere  con più prova

            Grande  

            #46140 Score: 1 | Risposta

            scossa
            Partecipante
              37 pts

              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 Sub
              

              n.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?

              #46141 Score: 0 | Risposta

              Oscar
              Partecipante
                45 pts

                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

                #46143 Score: 0 | Risposta

                Oscar
                Partecipante
                  45 pts

                  scossa ha scritto:

                  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 Sub

                  n.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

                  #46144 Score: 0 | Risposta

                  DeletedUser
                  Bloccato
                    13 pts

                    Oscar ha scritto:

                    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 Sub
                    #46145 Score: 0 | Risposta

                    scossa
                    Partecipante
                      37 pts

                      Oscar ha scritto:

                      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

                      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.

                      #46161 Score: 0 | Risposta

                      DeletedUser
                      Bloccato
                        13 pts

                        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 Sub
                        #46163 Score: 0 | Risposta

                        Oscar
                        Partecipante
                          45 pts

                          Ho 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

                          #46164 Score: 0 | Risposta

                          DeletedUser
                          Bloccato
                            13 pts

                            al di là delle tue ultime delucidazioni sul tuo obiettivo,

                            cosa ne dici di quanto ho proposto #46161?

                             

                             

                            #46167 Score: 0 | Risposta

                            Oscar
                            Partecipante
                              45 pts

                              fsm ha scritto:

                              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

                              #46173 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                scossa ha scritto:

                                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]

                                #46177 Score: 0 | Risposta

                                Oscar
                                Partecipante
                                  45 pts

                                  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.
                                  #46182 Score: 0 | Risposta

                                  Oscar
                                  Partecipante
                                    45 pts

                                    vecchio frac ha scritto:

                                    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)

                                    #46186 Score: 0 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      272 pts

                                      Oscar ha scritto:

                                      non sono mai stato tanto bravo ad ordinare le macro

                                      Prova con Glovo (Amazon e' lento)   

                                      #46187 Score: 0 | Risposta

                                      DeletedUser
                                      Bloccato
                                        13 pts

                                        Oscar ha scritto:

                                        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

                                        #46188 Score: 0 | Risposta

                                        Oscar
                                        Partecipante
                                          45 pts

                                          vecchio frac ha scritto:

                                          Prova con Glovo (Amazon e' lento)   

                                          Ci proverò grazie del consiglio

                                          Per il momento Resto in attesa!!!! di questa soluzione.........................

                                          #46189 Score: 0 | Risposta

                                          Oscar
                                          Partecipante
                                            45 pts

                                            fsm ha scritto:

                                            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

                                            #46201 Score: 0 | Risposta

                                            Oscar
                                            Partecipante
                                              45 pts

                                              fsm ha scritto:

                                              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

                                              #46205 Score: 0 | Risposta

                                              scossa
                                              Partecipante
                                                37 pts

                                                vecchio frac ha scritto:

                                                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.

                                                #46210 Score: 0 | Risposta

                                                vecchio frac
                                                Senior Moderator
                                                  272 pts

                                                  scossa ha scritto:

                                                  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"...)

                                                  #46212 Score: 0 | Risposta

                                                  scossa
                                                  Partecipante
                                                    37 pts

                                                    vecchio frac ha scritto:

                                                    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!   

                                                    #46213 Score: 0 | Risposta

                                                    vecchio frac
                                                    Senior Moderator
                                                      272 pts

                                                      ROTFL ma come ti vengono?
                                                      Anche qui ci vuole quella bella icona rotolante che ogni tanto ci elargisce Albatros   

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 33 totali)
                                                    Rispondi a: Chiudere direttamente userform se non viene fatta nessuna modifica
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: