[Risolto] Nome computer variabile
[Risolto] Nome computer variabile
Buonasera,
ho alcuni files di calc che contengono macro per copiare dati da un file ad un altro e fare altri lavori. Ovviamente quando devo fare riferimento ad un file esterno inserisco il percorso (indirizzo) del file stesso. Se però questo file viene utilizzato su un pc diverso dal mio, che ha naturalmente un altro nome, è ovvio che i riferimenti devono essere modificati perchè tutto funzioni. Quindi chiedo: esiste la possibilità di indicare nelle macro un percorso file valido per tutti i pc?
Mi spiego meglio invece di scrivere: sFileName ="C:\Users\Lenovo\Desktop\Nome File.ods" si potrebbe scrivere: sFileName="C:\Users\COMPUTERNAME\Desktop\Nome File.ods"
ovviamente dopo avere definito COMPUTERNAME=nome di questo pc (non ricordo bene se c'entra l'istruzione "Environ").
Sarebbe una bella comodità perchè in questo modo lo stesso file potrebbe essere utilizzato da pc diversi.
Grazie mille e buona serata a tutti.
ho alcuni files di calc che contengono macro per copiare dati da un file ad un altro e fare altri lavori. Ovviamente quando devo fare riferimento ad un file esterno inserisco il percorso (indirizzo) del file stesso. Se però questo file viene utilizzato su un pc diverso dal mio, che ha naturalmente un altro nome, è ovvio che i riferimenti devono essere modificati perchè tutto funzioni. Quindi chiedo: esiste la possibilità di indicare nelle macro un percorso file valido per tutti i pc?
Mi spiego meglio invece di scrivere: sFileName ="C:\Users\Lenovo\Desktop\Nome File.ods" si potrebbe scrivere: sFileName="C:\Users\COMPUTERNAME\Desktop\Nome File.ods"
ovviamente dopo avere definito COMPUTERNAME=nome di questo pc (non ricordo bene se c'entra l'istruzione "Environ").
Sarebbe una bella comodità perchè in questo modo lo stesso file potrebbe essere utilizzato da pc diversi.
Grazie mille e buona serata a tutti.
Ultima modifica di Ant52 il martedì 7 settembre 2021, 8:37, modificato 1 volta in totale.
OpenOffice 4.1.5 Windows 10
Re: Nome computer variabile
Prova a usare:
Acquisisci automaticamente URL del file
Codice: Seleziona tutto
ThisComponent.getURL()
Re: Nome computer variabile
Grazie per il suggerimento, però non ho capito se devo inserirlo al posto del "Nome Computer", se devo inserirlo come definizione all'inizio della macro o altro. In pratica questa è una delle macro che vorrei modificare:
Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Range1 = Sheet.getCellRangeByName("B6:B27").getDataArray ' range da copiare
Range2 = Sheet.getCellRangeByName("D6:D27").getDataArray ' range da copiare
Dim Args(0) As New com.sun.star.beans.PropertyValue
Args(0).Name = "MacroExecutionMode"
Args(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
sFileName = "C:\Users\Lenovo\Desktop\NomeFile.ods" ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Args() )
NomeFile = DocName.Sheets(2)
dRange1 = NomeFile.getCellRangeByName("B6:B27") ' range destinazione
dRange1.setDataArray(Range1)
dRange2 = NomeFile.getCellRangeByName("D6:D27") ' range destinazione
dRange2.setDataArray(Range2)
DocName.store()
Doc.Close(true)
End Sub
Chiedo scusa per l'ignoranza, ma non riesco a capire come fare questa modifica.
Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Range1 = Sheet.getCellRangeByName("B6:B27").getDataArray ' range da copiare
Range2 = Sheet.getCellRangeByName("D6:D27").getDataArray ' range da copiare
Dim Args(0) As New com.sun.star.beans.PropertyValue
Args(0).Name = "MacroExecutionMode"
Args(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
sFileName = "C:\Users\Lenovo\Desktop\NomeFile.ods" ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Args() )
NomeFile = DocName.Sheets(2)
dRange1 = NomeFile.getCellRangeByName("B6:B27") ' range destinazione
dRange1.setDataArray(Range1)
dRange2 = NomeFile.getCellRangeByName("D6:D27") ' range destinazione
dRange2.setDataArray(Range2)
DocName.store()
Doc.Close(true)
End Sub
Chiedo scusa per l'ignoranza, ma non riesco a capire come fare questa modifica.
OpenOffice 4.1.5 Windows 10
Re: Nome computer variabile
hai provato il suggerimento di lucky ? ti da il percorso del file, da questo puoi estrarre il nome del pc ed utilizzarlo per i tuoi scopi
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Nome computer variabile
Ho provato ad inserire questa riga nella macro ma, non sapendo come funziona, evidentemente non l'ho inserita nel posto corretto. Ho anche pensato che forse bisognerebbe fare una subroutine che rilevi il nome del pc e poi utilizzare il dato trovato ma per me, che ho competenze limitate, non è facile. Avrei bisogno di qualche altro suggerimento..... Grazie a tutti.
OpenOffice 4.1.5 Windows 10
Re: Nome computer variabile
.
Vedi esempio e relative info da cui trarre spunto per le modifiche che vorrai apportare.
Vedi esempio e relative info da cui trarre spunto per le modifiche che vorrai apportare.
Codice: Seleziona tutto
Sub NomeUtente
Rem Link di riferiment: https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=11339&sid=71cea26510759c05e019145474ac4950
Doc = ThisComponent
Url = Doc.GetUrl()
'MsgBox( Url ,0,"URL del file nel computer in uso")
REM ===========================================================
' Url Window sarà del tipo: file:///C:/Users/NomeUtente/.../...
' Url Linux sarà del tipo: file:///home/NomeUtente/.../...
' Url Mac sarà del tipo: file:///Users/NomeUtente/
REM ===========================================================
' ThisComponent.GetUrl() restituisce URL del file della macro già in formato barra rovescia
' anche in Windows e così non sarà necessaria la conversione da \ a /.
' SE FORNISCI indicazioni che il file della macro e il file esterno devono trovarsi stessa cartella
' la cartella potrà essere utilizzata in qualsiasi posizione di qualsiasi computer
' volendo anche da Pendrive/DiscoPortatile e ciò sarebbe molto utile e pratico.
REM ===========================================================
' In questo caso potresti ricavarti inizialmente "URL SENZA il NOME FILE" del file della macro
For X = Len(Url) To 1 Step -1
If InStr(X , Url , "/") <> 0 Then
PosizioneUltimaBarra = X
X = 1
End If
Next
UrlSenzaNomeFile = Left(url , PosizioneUltimaBarra)
'MsgBox (UrlSenzaNomeFile , 0 , "URL senza il nome del file")
' --- trasformando le due righe del tuo esempio da così:
' sFileName = "C:\Users\Lenovo\Desktop\NomeFile.ods" ' file destinazione
' DocUrl = ConvertToURL(sFileName)
' --- a così:
' DocUrl = UrlSenzaNomeFile & "\NomeFile.ods" ' o simili
REM ===========================================================
' nel caso invece volessi ricavarti automaticamente solo il "NomeUtente" indipendentemente dal sistema operativo
' considera che in tutti e tre i S.O. la "/" prima del "NomeUtente" la trovi normalmente dopo il 12 carattere dell'url
' ATTENZIONE: Casistica NON sempre vefificabile per Url esterni al "NomeUtente" (PenDrive/DischiEsterni, ...) su Windows/Mac.
' Trovo la posizione iniziale esatta della "/" prima del "NomeUtente"
InizioNomeUtente = InStr(12 , Url , "/")
NomeUtentePiuPercorso = Right(Url , Len(Url)-InizioNomeUtente)
FineNomeUtente = InStr(NomeUtentePiuPercorso , "/")-1
Utente = Left(NomeUtentePiuPercorso , FineNomeUtente)
MsgBox(Url & chr$(13) & chr$(13) & _
"URL senza nome del file: " & UrlSenzaNomeFile & chr$(13) & chr$(13) & _
"Nome Utente: " & Utente , 0 ,"URL - URL senza nome file - Nome utente")
End Sub
- Allegati
-
- Test - Macro - NomeUtente.ods
- (14.48 KiB) Scaricato 83 volte
Re: Nome computer variabile
Ho fatto alcune prove ma senza alcun risultato. Poi mi è venuto il dubbio di non essere stato chiaro nell'esposizione del problema. Infatti quando si avvia la macro postata viene visualizzata la finestra del MsgBox con i dati del file nel quale si trova la macro mentre a me interessano i dati del file di destinazione che si trova sul desktop e che viene aperto dalla macro. Per sintetizzare mi servirebbe una istruzione o una subroutine (non saprei come definirle) che rilevi automaticamente il nome del pc in cui si trova il file ricevente che viene aperto dalla macro in cui si trova il file da copiare.
Spero di essere stoto chiaro ma, ovviamente, posso allegare dei file esplicativi se necessario. Grazie ancora per la pazienza.
Spero di essere stoto chiaro ma, ovviamente, posso allegare dei file esplicativi se necessario. Grazie ancora per la pazienza.
OpenOffice 4.1.5 Windows 10
Re: Nome computer variabile
Conferma che il file con la macro viene lanciato dallo stesso spazio disco (C:\User\Lenovo\......) contenente il file archivio.
Re: Nome computer variabile
Certamente si. In pratica ricevo questo file via mail lo scarico sul PC e con la macro che si trova nel file che ho scaricato apro un altro file sul mio PC e copio un insieme di dati. Quindi i due file stanno nello stesso PC.
OpenOffice 4.1.5 Windows 10
Re: Nome computer variabile
Il mio esempio era solo una traccia per farti capire come poter elaborare la stringa URL acquisita automaticamente ...
...
Imposta inizialmente la macro
Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Url = Doc.GetUrl()
Print Url
STOP
...
Ti visualizzerà il percorso Url acquisito automaticamente dal tuo PC (o dal PC/Utente che lo lancia).
Potrai applicare istruzioni successive simili al mio esempio per ricavarti quello che per te è "Lenovo" e altri PC/Utenti qualcosa di diverso.
A mio avviso sarebbe però meglio che entrambi i file si trovassero nello stesso percorso ( quindi semplificheresti in quanto Url uguale tranne che nella parte finale relativa a "NomeFile.ods").
...
Imposta inizialmente la macro
Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Url = Doc.GetUrl()
Print Url
STOP
...
Ti visualizzerà il percorso Url acquisito automaticamente dal tuo PC (o dal PC/Utente che lo lancia).
Potrai applicare istruzioni successive simili al mio esempio per ricavarti quello che per te è "Lenovo" e altri PC/Utenti qualcosa di diverso.
A mio avviso sarebbe però meglio che entrambi i file si trovassero nello stesso percorso ( quindi semplificheresti in quanto Url uguale tranne che nella parte finale relativa a "NomeFile.ods").
Re: Nome computer variabile
Ho inserito, all'inizio della macro, le righe che mi hai indicato ma nel MsgBox viene sempre visualizzato il percorso del file di partenza dei dati e non quello del file di destinazione che è quello che invece mi serve per indirizzare correttamente l'apertura del file ricevente in qualsiasi pc venga scaricato il file di partenza. Poi non ho capito perchè hai scritto che "sarebbe meglio che entrambi i file si trovassero nello stesso percorso". Io pensavo di avere chiarito che il file di partenza viene scaricato sul desktop del pc (e quindi avrà un percorso del tipo C:\Users\NomePC\Desktop\NomeFile) e che, tramite una macro, aprirà un altro file situato sempre sul desktop del pc (quindi con un percorso identico tranne che nel nome del file) per copiare alcuni dati. Non capisco se c'è qualcosa che mi sfugge. Grazie per il supporto.
OpenOffice 4.1.5 Windows 10
Re: Nome computer variabile
Quindi rientriamo nella fattispecie migliore (entrambi i file nella stessa cartella "Desktop" ma anche potenzialmente in qualsiasi altra cartellaAnt52 ha scritto:o pensavo di avere chiarito che il file di partenza viene scaricato sul desktop del pc (e quindi avrà un percorso del tipo C:\Users\NomePC\Desktop\NomeFile) e che, tramite una macro, aprirà un altro file situato sempre sul desktop del pc (quindi con un percorso identico tranne che nel nome del file) per copiare alcuni dati.
...
Vedi se così ti è più chiaro il risultato.
Codice: Seleziona tutto
Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
REM ===========================================================
Rem Acquisisco URL completo relativo a QUALSIASI PC da cui venga avviato il file
Url = Doc.GetUrl()
' Url Window sarà del tipo: file:///C:/Users/NomeUtente/.../.../NomeDelFileDiAvvioDellaMacro.ods
' Url Linux sarà del tipo: file:///home/NomeUtente/.../.../NomeDelFileDiAvvioDellaMacro.ods
' Url Mac sarà del tipo: file:///Users/NomeUtente//.../.../NomeDelFileDiAvvioDellaMacro.ods
'
' il file quando scaricato/eseguito sul Desktop di un'altro PC/Utente
' con l'istruzione .GetUrl() restituirà URL del PC/Utente (posizione di avvio dove è stato scaricato)
' Essendo entrambi i file sul Desktop cambia solo la parte finale "NomeDelFileDiAvvioDellaMacro.ods".
' Quindi trovando la posizione dell'ultima / del Url riesco poi a estrarre la parte iniziale
' fino all'ultima / escluso il "NomeDelFile.ods" di avvio della macro
' per concatenare poi quanto così estratto con il "NomeDelFileDell'ArchivoEsterno.ods"
' Parte iniziale che sarà pertanto uguale per entrambi nel formato suddetto escluso NomeDelFile.
'
REM Trovo la posizione dell'ultima / all'interno della stringa dell'URL acquisito automaticamente.
For X = Len(Url) To 1 Step -1
If InStr(X , Url , "/") <> 0 Then
PosizioneUltimaBarra = X
X = 0
End If
Next
UrlSenzaNomeFile = Left(url , PosizioneUltimaBarra)
'MsgBox (UrlSenzaNomeFile , 0 , "URL senza il nome del file") 'Verifica OK
REM ===========================================================
Sheet = Doc.Sheets(0)
Range1 = Sheet.getCellRangeByName("B6:B27").getDataArray ' range da copiare
Range2 = Sheet.getCellRangeByName("D6:D27").getDataArray ' range da copiare
Dim Args(0) As New com.sun.star.beans.PropertyValue
Args(0).Name = "MacroExecutionMode"
Args(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
REM ===========================================================
' Altre modifiche rispetto al tuo esempio:
' sFileName = "C:\Users\Lenovo\Desktop\NomeFile.ods" ' file destinazione
' DocUrl = ConvertToURL(sFileName)
DocUrl = UrlSenzaNomeFile & "NomeDelFileDell'ArchivoEsterno.ods" ' Url completo del file di destinazione
REM ===========================================================
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Args() )
NomeFile = DocName.Sheets(2)
dRange1 = NomeFile.getCellRangeByName("B6:B27") ' range destinazione
dRange1.setDataArray(Range1)
dRange2 = NomeFile.getCellRangeByName("D6:D27") ' range destinazione
dRange2.setDataArray(Range2)
DocName.store()
Doc.Close(true)
End Sub
Re: [Risolto] Nome computer variabile
Ho modificato 4 macro secondo i tuoi suggerimenti e, come era ovvio aspettarsi, funzionano tutte perfettamente. La parte iniziale l'avevo modificata correttamente ma nel percorso del file non avevo capito che bastava aggiungere la & tra l'URL ottenuto automaticamente e il nome del file stesso e mi sono perso con barre(\ e /) a destra e sinistra. Ti ringrazio moltissimo per il preziosissimo aiuto e la pazienza nel seguire passo passo i principianti come me. Buona giornata.
OpenOffice 4.1.5 Windows 10