Sviluppare funzionalita su Microsoft Office con VBA "salva con nome e chiudi" e poi diventa solo "salva e chiudi"

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

    marco_budin
    Partecipante
      2 pts

      Buongiorno a tutti,

      ho un file vergine che a inizio di ogni nuovo intervento ogni collega deve aprire. Arriva il primo collega e apre questo file. Poi il collega deve assentarsi, e in alto trova un tasto che può schiacciare "Cambio Utente" (codice salva_con_nome). Il file viene salvato con nome e si auto chiude in automatico. Il file viene salvato in una specifica cartella con nome: NomeCognome_DataOrarioSalvataggio_NumeroPaziente.xlsm

      Sub Salva_con_nome()
      
      If MsgBox("Attenzione: la procedura verrà salvata, e potrà essere continuata dal collega. Il file si trova nella cartella: Procedura in corso. Procedere?", vbYesNo, "Speichern") = vbYes Then
      
      Dim fName As String
      Dim MyDirS As String
      fName = Sheets("intervento spinale").Range("af7")
      MyDirS = Sheets("DataBase").Range("t8")
      ActiveWorkbook.SaveAs Filename:= _
      MyDirS & fName & ".xlsm", FileFormat:= _
              xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
      
      Application.Quit
      End If
      End Sub

      Qui nasce il problema: arriva il secondo collega per continuare l'intervento, iniziato dal primo collega, va nella cartella specifica e apre il file salvato con nome in precedenza. A questo punto il secondo collega si deve assentare, e quindi anche lui schiaccia il tasto "cambia utente". Però quel tasto avendo il codice "salva con nome", creerà un nuovo file. A fine intervento se i cambi sono stati frequenti si potranno avere decine di file dello stesso intervento. (i colleghi chiaramente riconoscono la nuova versione attraverso l'orario... ma questo crea confusione).

      la mia domanda è: si può fare che aprendo il file vergine... il tasto "cambia utente" è impostato con il codice "salva con nome e chiudi"... poi al suo salvataggio con nome... il nuovo file creato il tasto si "trasforma" e avrà come codice solo "salva e chiudi"

      Sub salva_Chiudi()
      ActiveWorkbook.Save
      Application.Quit
      End Sub

      non so come farlo trasformare... oppure... creo due tasti uno è all'inizio poi si "nasconde" e appare l'altro al suo salvataggio con nome... non so cosa più semplice fare 🙂

      mi chiederete perché devono ogni volta salvarlo: perché per ogni cambio di collega, il collega deve scollegarsi dal PC e il nuovo collega deve accedere con il proprio accesso 🙂

      spero che qualcuno possa aiutarmi nel mio problemino... e chiaramente vi ringrazio anticipatamente come sempre!!

      saluti e a presto

      Marco

       

       

      #7715 Score: 0 | Risposta

      Luca73

        Secondo me la cosa più semplice è identificare qualcuna che cambia dalla prima apertura alle altre. Per esempio una cella che viene riempita o assumo un valore oppure la cartella di salvataggio oppure creare una cella che cambia valore ad hoc (vero o falso). Poi quando chiudi verifiche e con una condizione se fai partire un salva o un salvaconnome

        Ciao luca

        #7716 Score: 0 | Risposta

        Luca73

          Qualcosa non qualcuna ...

          #7717 Score: 0 | Risposta

          marco_budin
          Partecipante
            2 pts

            ciao Luca73! grazie per la tua risposta!

            ho risolto in questo modo... non è la cosa più elegante, ma funziona 🙂

            ho creato 2 tasti, uno sopra l'altro. al primo salvataggio con nome (primo pulsante in primo piano), il pulsante si nasconde, e quindi alla riapertura del file ci sarà solamente il pulsante salva (quello che prima era coperto in secondo piano).

            Sub Salva_con_nome()
            
            If MsgBox("Attenzione: la procedura verrà salvata, e potrà essere continuata dal collega. Il file si trova nella cartella: Procedura in corso. Procedere?", vbYesNo, "Speichern") = vbYes Then
            
            ActiveSheet.Shapes("Pulsante 56134").Visible = False  ' <------ aggiunto la funzione nasconti pulsante!'
            
            Dim fName As String
            Dim MyDirS As String
            fName = Sheets("intervento spinale").Range("af7")
            MyDirS = Sheets("DataBase").Range("t8")
            ActiveWorkbook.SaveAs Filename:= _
            MyDirS & fName & ".xlsm", FileFormat:= _
                    xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
            
            Application.Quit
            End If
            End Sub

            magari potrà essere d'aiuto a qualcun altro... se qualcuno comunque ha una soluzione più elegante sono sempre propenso ad imparare 🙂

            ringrazio tutti, e vi auguro una buona giornata

            alla prossima

            Marco

            #7720 Score: 0 | Risposta

            Marius44
            Moderatore
              58 pts

              Ciao

              Una alternativa potrebbe essere questa:

              a) inserisci nel Foglio un Pulsante ActiveX; cambia la proprietà  .Caption da "CommandButton1" a "Salva con nome"

              b) inserisci nel Modulo del pulsante un codice (adattato) come questo

              Private Sub CommandButton1_Click()
                With CommandButton1
                  If .Caption = "Salva con nome" Then
                    Stop
                    .Caption = "Salva e chiude"
                    
                    ' tuo codice per la prima volta
                    
                  ElseIf .Caption = "Salva e chiude" Then
                    Stop
                    
                    ' tuo codice per le volte successive
                    
                  End If
                End With
              End Sub

              Quando il file è intonso il pulsante mostrerà la dicitura " Salva con nome " mentre tutte le volte successive mostrerà la dicitura "Salva e chiude ".

               

              Ciao,

              Mario

               

              #7721 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                marco_budin wrote:se qualcuno comunque ha una soluzione più elegante sono sempre propenso ad imparare

                La soluzione più elegante è rifare tutto in Access 🙂

                Restando in Excel, potresti impostare un database degli utenti, dove chi si collega viene registrato, unitamente a un univoco codice sessione abbinato al file o all'intervento; quando si scollega il programma registra il logout, con data e ora dell'operazione, relativo a quella sessione. Chi si collega successivamente e apre il file relativo al medesimo codice sessione, questo fatto viene riconosciuto dal sistema come un "proseguimento" e quindi eseguirà l'azione di salvataggio opportuna.

                #7726 Score: 0 | Risposta

                albatros54
                Moderatore
                  89 pts

                  Ho pensato e ripensato, ti allego questo file, provalo, se ti va bene  commentiamo il codice con cui è stato creato

                   

                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                  Sempre il mare, uomo libero, amerai!
                  ( Charles Baudelaire )
                  Allegati:
                  You must be logged in to view attached files.
                  #7736 Score: 0 | Risposta

                  marco_budin
                  Partecipante
                    2 pts

                    ciao a tutti! grazie mille delle varie risposte che ho ricevuto.

                    @albatros54 ho visto il tuo file, ed è geniale. Fai contare quante volte si accede, come aveva proposto Vecchio frac (che ringrazio anche lui della sua proposta). con il tuo codice devo creare un database del personale giusto? faccio una lista con il persona e così il tuo codice riconosce anche chi è l'utente che accede. corretto?

                    cmq davvero geniale, provo ad adeguarlo con i vari codici corretti, così vedo se funziona.

                    ti ringrazio ancora tanto per il tuo aiuto, e il vostro aiuto.

                    saluti e a presto

                    Marco

                    #7737 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      89 pts

                      marco_budin wrote:con il tuo codice devo creare un database del personale giusto?

                      No, non devi creare nessun database, perche il file va a scrive sul registro di configuraziione di win. Allora questo è il codice che è inserito nel modulo "thisWorkbook"

                      Option Explicit
                      
                      Public Sub Workbook_Open()
                          Dim counter As Long, LastOpen As String, Msg As String
                          Dim LastMedico As String
                          ' L'istruzione GetSetting legge il valore del registro di configurazione di win
                          ' che corrisponde alle chiavi che sono memorizzate
                          ' il prercorso del file di conf. di win lo trovi
                          ' HKEY_CURRENT_USER\Software\VB and VBA Program Settings\OspedaleLugano
                          ' intervento spinale,Count
                          'counter legge quante volte il file è stato aperto
                          counter = GetSetting("OspedaleLugano", "intervento spinale", "Count", 0)
                          'Lastopen legge  quando è stato aperto l'ultima volta il file
                          LastOpen = GetSetting("OspedaleLugano", "intervento spinale", "Opened", "")
                          ' LastMedico legge  il nome del medico che ha aperto l'ultima volta il file
                          LastMedico = GetSetting("OspedaleLugano", "intervento spinale", "NomeMedico", "")
                          Msg = "Questo file è stato aperto " & counter & " volte."
                          Msg = Msg & vbCrLf & "Ultimo Accesso: " & LastOpen
                          Msg = Msg & vbCrLf & "Ultimo Accesso Medico: " & LastMedico
                          MsgBox Msg, vbInformation, thisworkbook.Name
                      Worksheets("Foglio1").CommandButton1.Caption = ("Salva con Nome")
                      End Sub
                      
                      

                      questo è il codice che trovi nel modulo del file:

                      Option Explicit
                      Global counter As Integer
                      Public Sub Salva_con_nome()
                      Dim Medico As String, fName As String, MydirS As String
                      Dim LastOpen As Date
                      counter = GetSetting("OspedaleLugano", "intervento spinale", "Count", 0)
                      If MsgBox("Attenzione: la procedura verrà salvata, e potrà essere continuata dal collega. Il file si trova nella cartella: Procedura in corso. Procedere?", vbYesNo, "Speichern") = vbYes Then
                      ' ti chiede di introdurre il nome del medico che ha aperto il file
                      Medico = Application.InputBox("inserisi nome medico")
                      If Medico = CStr(False) Then
                      MsgBox "Hai premuto Annulla,uscirai dalla Procedura"
                      Exit Sub
                      End If
                      If Medico = vbNullString Then
                      MsgBox "Non hai inserito il Nome del Dottore, uscirai dalla Procedura"
                      Exit Sub
                      End If
                      fName = Sheets("intervento spinale").Range("af7")
                      MydirS = Sheets("DataBase").Range("t8")
                      ActiveWorkbook.SaveAs Filename:= _
                      MydirS & fName & ".xlsm", FileFormat:= _
                      xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
                      counter = counter + 1
                      LastOpen = Date & " " & Time
                      ' Savesetting serve a memorizzare i parametri associati alle chiavi nel Reg di win
                      'Salviamo nel Reg di win il numero di volte che il file è stato aperto
                      SaveSetting "OspedaleLugano", "intervento spinale", "Count", counter
                      'Salviamo la data di salvataggio con l'ora
                      SaveSetting "OspedaleLugano", "intervento spinale", "Opened", LastOpen
                      ' Salviamo il nome del medico che ha aperto il file
                      SaveSetting "OspedaleLugano", "intervento spinale", "NomeMedico", Medico
                      
                      End If
                      
                      End Sub
                      
                      Public Sub salva()
                      Dim fName As String
                      Dim MydirS As String
                      counter = GetSetting("OspedaleLugano", "intervento spinale", "Count", 0)
                      If MsgBox("Attenzione: la procedura verrà salvata, e potrà essere continuata dal collega. Il file si trova nella cartella: Procedura in corso. Procedere?", vbYesNo, "Speichern") = vbYes Then
                      Medico = Application.InputBox("inserisico nome medico")
                      
                      If Medico = False Then
                      MsgBox "Hai premuto Annulla,uscirai dalla Procedura"
                      Exit Sub
                      End If
                      If Medico = vbNullString Then
                      MsgBox "Non hai inserito il Nome del Dottore, uscirai dalla Procedura"
                      Exit Sub
                      End If
                      
                      'fName = Sheets("intervento spinale").Range("af7")
                      'MyDirS = Sheets("DataBase").Range("t8")
                      ActiveWorkbook.Save
                      counter = counter + 1
                      LastOpen = Date & " " & Time
                      SaveSetting "OspedaleLugano", "intervento spinale", "Count", counter
                      SaveSetting "OspedaleLugano", "intervento spinale", "Opened", LastOpen
                      SaveSetting "OspedaleLugano", "intervento spinale", "NomeMedico", Medico
                      'Application.Quit
                      End If
                      
                      End Sub
                      
                      
                      

                       

                       

                      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                      Sempre il mare, uomo libero, amerai!
                      ( Charles Baudelaire )
                      #7739 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        albatros54 wrote:il file va a scrive sul registro di configuraziione di win

                        In passato ho utilizzato anch'io questa tecnica, che funziona e gira bene.

                        Purtroppo basta cambiare pc (o farselo aggiornare magari da Win stesso) e ti ritrovi senza dati 🙂

                        Per questo consigliavo un database degli utenti, ma può andare bene anche un semplice file ini con tutte le impostazioni (da gestire magari con il modulo di inimanager proposto nel blog di questo forum). 

                        Questo è comunque solo il mio 2cent personale. La proposta di Albatros è pienamente condivisibile 🙂

                        #7740 Score: 1 | Risposta

                        marco_budin
                        Partecipante
                          2 pts

                          Ciao albatros e vecchio frac,

                          Vi ringrazio per le vostre spiegazioni.

                          Cioe come farei senza voi due (e anche gli altri che collaborano). Non essendo un informatico, anzi lavoro nel settore sanitario, ho solamente per hobby e per disperazione (spesso le cose nascono per quello), imparato le basi su tutorial in internet, grazie a voi ho davvero imparato molto. Ma sopratutto i vari codici, o le varie soluzioni che mi fornite, le adeguo, o le integro con altri codici.

                          Siete davvero una grande fonte d aiuto!

                          Domani provo ad inserire il codice nel mio file e vi faro sapere!!

                          Un sincero grazie e buona serata

                          Marco

                           

                        Login Registrati
                        Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
                        Rispondi a: "salva con nome e chiudi" e poi diventa solo "salva e chiudi"
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: