› Sviluppare funzionalita su Microsoft Office con VBA › Errore formula esportazione LOG-file
-
AutoreArticoli
-
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 Subio 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 SubQualcuno 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
io provere cosi
Const LogFileName As String = "\LogFile.log"percorso = Sheets("foglio1").Range("a1") & LogFileNamedove nella cella ("a1") c'è il percorso
O:\Sala Operatoria\Report Ripresa Dati SOP\Sala OP\StatisticaQual è 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 )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 stringfuori dalle routine del modulo per renderla accessibile all'intero progetto.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 PropertyTestiamolo! 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?
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 SubMa 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
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?
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
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 #FileNumChiaramente in cella T12 del foglio Database deve esserci un percorso valido, tipo "C:\users\utente\desktop" o che altro.
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
-
AutoreArticoli
