Buongiorno a tutti,
spero di riuscire a spiegare chiaramente quello che vorrei sapere che forse è più complicato spiegarlo che farlo, spero anche che il file che allego mi aiuti in questo scopo.
Scrivendo una macro mi può capitare di avere necessità di avere il valore contenuto in una cella di un file terzo (chiamiamolo file A.ods), cioè non quello in cui sto scrivendo la macro (chiamiamolo file B.ods).
Quando mi capita, risolvo utilizzando come "cella di servizio" una cella del file su cui sto lavorando (B.ods).
In pratica con la macro inserisco nella cella di servizio del file B.ods il collegamento alla cella che mi serve del A.ods, assegno il valore ad una variabile poi cancello il collegamento.
La domanda è questa: è possibile senza fare questi passaggi, assegnare direttamente ad una variabile (numerica o alfanumerica) il valore di una cella di un file terzo? Qualcosa tipo:
a$=percorsofile_posizionecella
Grazie per l'attenzione e per l'eventuale risposta.
Ciao.
Luca.
[Risolto] Assegnare il valore di una cella di altro file
[Risolto] Assegnare il valore di una cella di altro file
- Allegati
-
- B.ods
- (8.51 KiB) Scaricato 85 volte
Ultima modifica di il Luca il sabato 9 gennaio 2021, 15:19, modificato 2 volte in totale.
LibreOffice 6.0.7.3
Linux Ubuntu LTS 20.04
Linux Ubuntu LTS 20.04
Re: Assegnare il valore di una cella di altro file ad una va
Nel tuo esempio sarebbe simile a:
oppure:
ma in questo caso specifico ricorrere a .Formula o .FormulaLocal non è consigliabile:
- per una questione relativa all'aggiornamento automatico dei collegamento esterni;
- il dato esterno viene acquisito sempre come stringa e se numerico andrebbe poi convertito (vedasi: CInt(Var), CLng(Var), ...).
E' preferibile ricorrere a codice simile al seguente che fa un'apertura/chiusura nascosta del file esterno acquisendo il dato di interese.
Codice: Seleziona tutto
... .Formula = "=HYPERLINK(" & "'file:///home/NomeUtente/Scrivania/A.ods'#$Foglio1.A3)" 'collego le celleoppure:
Codice: Seleziona tutto
... .FormulaLocal = "=COLLEGAMENTO(" & "'file:///home/NomeUtente/Scrivania/A.ods'#$Foglio1.A3)" 'collego le cellema in questo caso specifico ricorrere a .Formula o .FormulaLocal non è consigliabile:
- per una questione relativa all'aggiornamento automatico dei collegamento esterni;
- il dato esterno viene acquisito sempre come stringa e se numerico andrebbe poi convertito (vedasi: CInt(Var), CLng(Var), ...).
E' preferibile ricorrere a codice simile al seguente che fa un'apertura/chiusura nascosta del file esterno acquisendo il dato di interese.
Codice: Seleziona tutto
Sub CaricaDatiDaCellaFileEsterno
Rem Link del quesito: https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=10963
Rem ----------------------------------------------------------------------------------------------------------------------------
Rem Dichiara il vettore come nuova istanza associandogli la proprietà Hidden/Nascosto
Rem Non farà mostrare la finestra di caricamento del file di origine
Dim Dummy(0) as New com.sun.star.beans.PropertyValue
Dummy(0).Name = "Hidden"
Dummy(0).Value = True
Rem File e Foglio di origine dei dati
FileOrigine = StarDesktop.loadComponentFromURL ("file:///home/NomeUtente/Scrivania/A.ods", "_blank",0, Dummy() )
FoglioOrigine = FileOrigine.Sheets(0) 'PrimoFoglio
CellaOrigine = FoglioOrigine.GetCellRangeByName("A9").Value 'oppure .string ...
FileOrigine.Close(True) 'Chiusura file origine dati
Msgbox ("Valore cella del file esterno = " & CellaOrigine, 0 , "VERIFICA")
End sub
Re: [RISOLTO] Assegnare il valore di una cella di altro file
Grazie, esattamente ciò che cercavo.
I primi due sistemi che prospetti sono sostanzialmente ciò che ho messo nel file di esempio. Il problema degli aggiornamenti non si pone perchè il mio scopo è quello di acquisire il valore di una cella nel momento in cui gira la macro, difatti dopo averlo fatto cancello il link. La soluzione è certamente funzionale tuttavia non mi piace dovermi appoggiare a celle "di servizio", inoltre quando le celle da acquisire sono tante, tipo centinaia, la faccenda rallenta un bel po.
Invece il tuo suggerimento finale è esattamente ciò che volevo fare ma non sapevo come. Adesso farò qualche prova augurandomi con questo sistema di avere contemporaneamente aumentato la velocità di reperimento dei valori delle celle "remote".
Grazie ancora
Ciao.
Luca.
I primi due sistemi che prospetti sono sostanzialmente ciò che ho messo nel file di esempio. Il problema degli aggiornamenti non si pone perchè il mio scopo è quello di acquisire il valore di una cella nel momento in cui gira la macro, difatti dopo averlo fatto cancello il link. La soluzione è certamente funzionale tuttavia non mi piace dovermi appoggiare a celle "di servizio", inoltre quando le celle da acquisire sono tante, tipo centinaia, la faccenda rallenta un bel po.
Invece il tuo suggerimento finale è esattamente ciò che volevo fare ma non sapevo come. Adesso farò qualche prova augurandomi con questo sistema di avere contemporaneamente aumentato la velocità di reperimento dei valori delle celle "remote".
Grazie ancora
Ciao.
Luca.
LibreOffice 6.0.7.3
Linux Ubuntu LTS 20.04
Linux Ubuntu LTS 20.04
