Sviluppare funzionalita su Microsoft Office con VBA Errore formula esportazione LOG-file

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

    marco_budin
    Partecipante
      2 pts

      buongiorno a tutti,

      ho creato un codice che mi fa esportare i log-file in una cartella e registra in questo log file l'entrata dell utente al file e l'uscita.

      adesso però mi nasce un problema con il codice io ho ripreso il codice, e ho dovuto scrivere il percorso dove trovare/salvare il LOG-file...

      Sub LogInformation(LogMessage As String)
      
      Const LogFileName As String = "O:\Sala Operatoria\Report Ripresa Dati SOP\Sala OP\Statistica\LogFile.log"
      
      Dim FileNum As Integer
      FileNum = FreeFile ' next file number
      Open LogFileName For Append As #FileNum ' creates the file if it doesn't exist
      Print #FileNum, LogMessage ' write information at the end of the text file
      Close #FileNum ' close the file
      
      End Sub

      io però per semplificare i cambiamenti dei percorsi di tuto il file che ho creato, ho creato un database, dove sono raggiuppati ed elencati tutti i percorsi. Cosi se cambia uno basta andare nel foglio DataBase e cambio, senza andare a cambiare in ogni modulo il percorso.

      Qui nasce il problema. Ho provato ad inserire al posto del percorso Sheets("DataBase").Range("t12") ma mi esce l'errore: Errore di compilazione, necessaria espressione costante.

      ho scritto così il codice:

      Sub LogInformation(LogMessage As String)
      
      Const LogFileName As String = Sheets("DataBase").Range("t12")
      Dim FileNum As Integer
      FileNum = FreeFile ' next file number
      Open LogFileName For Append As #FileNum ' creates the file if it doesn't exist
      Print #FileNum, LogMessage ' write information at the end of the text file
      Close #FileNum ' close the file
      
      End Sub

      Qualcuno sa aiutarmi come poter risolvere il problema? ho dimenticato qualcosa? nella cella sheets("DataBase").Range("T12") ho scritto così il percorso: O:\Sala Operatoria\Report Ripresa Dati SOP\Sala OP\Statistica\LogFile.log

      vi ringrazio anticipatamente,

      marco

      #7593 Score: 0 | Risposta

      albatros54
      Moderatore
        89 pts

        io provere cosi

        Const LogFileName As String = "\LogFile.log"
        percorso = Sheets("foglio1").Range("a1") & LogFileName

        dove nella cella ("a1") c'è il percorso

        O:\Sala Operatoria\Report Ripresa Dati SOP\Sala OP\Statistica

         

         

        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 )
        #7596 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          In pratica, la costante non può riferirsi a n valore mutevole come il contenuto di una cella.

          Come dice Albatros, necessariamente devi rendere pubblica una variabile normale, da valorizzare all'inizio del modulo. Nel resto del codice non dovrai mai modificarla sicchè essa fungerà da "costante", anche se non lo è.

          Nel codice di Albatros la stringa del file di log è staccata dal suo path, ed è invece la variabile "percorso" quella che punta effettivamente al file di log.

          Dovrai dichiarare ad esempio Public percorso as string fuori dalle routine del modulo per renderla accessibile all'intero progetto.

          #7597 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Comunque, più per curiosità che per altro, premesso che il trucco della variabile pubblica è validissimo, vi illustro una tecnica alternativa ma più efficace della variabile pubblica, che magari per distrazione può essere modificata in qualsiasi altro punto del programma (basta per restare nell'esempio fatto che ci sia in un punto del codice di qualsiasi modulo un'istruzione tipo  percorso = "" per andare a quel paese tutta la logica).

            Il concetto è creare una variabile pubblica con un costrutto Property Get, che è tipicamente uno statement di un modulo d classe per indicare un attributo a sola lettura. Tale costrutto si può utilizzare anche fuori da un modulo di classe, in un modulo standard, per definire una variabile (pubblica o privata) dotata della caratteristica di sola lettura. Per cui sarà impossibile, nel resto del codice, modificarla. E quindi avrà funzione di costante 🙂

            In un modulo:

            Option Explicit
            
            Public Property Get variable()
                variable = "Hello kitty"
            End Property

            Testiamolo! In un qualsiasi altro punto del codice (un nuovo modulo o in codice foglio per esempio):

            `Option Explicit
            
            Sub test()
                MsgBox variable
                variable = "nuovo testo"
            End Sub`

            Avete provato? che cosa avete ottenuto?   

             

            #7598 Score: 0 | Risposta

            marco_budin
            Partecipante
              2 pts

              ciao a tutti!! grazie mille per le vostre risposte.

              @Albatros... ho provato il tuo codice.. e ho scritto:

              Sub LogInformation(LogMessage As String)
              
              Const LogFileName As String = "\LogFile.log"
              percorso = Sheets("DataBase").Range("T12") & LogFileName
              Dim FileNum As Integer
              FileNum = FreeFile ' next file number
              Open LogFileName For Append As #FileNum ' creates the file if it doesn't exist
              Print #FileNum, LogMessage ' write information at the end of the text file
              Close #FileNum ' close the file
              
              End Sub

              Ma non funziona…. cioe non crea niente. Non crea ne il Log-file se non esiste… e se esiste non scrive niente...

              @vecchio frac, nel mio codice posso domandarti come inseriresti la variabile? ti ringrazio!

               

              in attesa vi auguro una buona serata

              a presto

              Marco

              #7599 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                marco_budin wrote:Ma non funziona…. cioe non crea niente

                Ma per forza... non leggete il codice che scrivete o che vi proponiamo?  🙂

                Non ti dico subito la soluzione, ti invito a riflettere su quanto hai scritto.

                Che valore ha LogFileName quando esegui il programma?

                Leggi riga per riga, la risposta ti arirverà da sola 😀

                 

                marco_budin wrote: posso domandarti come inseriresti la variabile?

                certo che puoi domandarlo, ma quale variabile?

                 

                 

                #7600 Score: 0 | Risposta

                marco_budin
                Partecipante
                  2 pts

                  Ciao Vecchio Frac, allora capisco che cè qualcosa che non va… cioe la variabile Percorso… non ha dove andare… ma non riesco a capire cosa ho devo sostituire/modificare…  🙂

                  ti ringrazio in anticipo… e ti auguro una buona serata

                  marco

                  #7601 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    marco_budin wrote: cioe la variabile Percorso

                    Ottimo!! E' lì che è stato inserito, dopo la modifica suggerita da Albatros, il percorso completo (path + nome file) del file di log.

                    Quindi è quel file lì che devi dire ad Excel di aprire, compilare e successivamente chiudere:

                    Open percorso For Append As #FileNum

                    Chiaramente in cella T12 del foglio Database deve esserci un percorso valido, tipo "C:\users\utente\desktop" o che altro.

                    #7602 Score: 0 | Risposta

                    marco_budin
                    Partecipante
                      2 pts

                      ciao Vecchio frac! sei fantastico. Grazie mille dell'aiuto e soprattutto delle spiegazioni... e chiaramente adesso funziona!

                      ti ringrazio e ti auguro un buon weekend!

                      saluti e alla prossima

                      Marco

                    Login Registrati
                    Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
                    Rispondi a: Errore formula esportazione LOG-file
                    Gli allegati sono permessi solo ad utenti REGISTRATI
                    Le tue informazioni: