Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Salvare il valore di una cella

Ultimo Aggiornamento: 14/09/2017 16:22
Post: 1
Registrato il: 11/09/2017
Città: MILANO
Età: 27
Utente Junior
2003
OFFLINE
11/09/2017 18:20

Ciao a tutti, praticamente io ho una cella di excel nella quale ho
messo una formula che mi mostra dei dati di borsa in tempo reale di quella giornata. Io vorrei far si che ad una certa ora il valore all' interno di quella casella sia consolidato ovvero, se per esempio verso le 17.30, anche se in quella casella è presente una formula che mostra un valore in tempo reale, qauesta formula deve smettere di funzionare e mostrare il valore corrente delle 17.30

Esempio pratico, alle 17.30 il valore mostrato nella casella è 3000
ma continuerà a cambiare grazie alla formula presente nella casella e tipo alle 17.31 diventa che so 2500. Io cerco un metodo per far si che alle 17.30 la formula dentro quella casella si "blocchi" e smetta di aggiornarsi con il valore degli orari successivi.

Spero di essermi spiegato bene, vi ringrazio in anticipo per le risposte!!
Post: 1.609
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
11/09/2017 18:40

Ciao
supponendo che la cella da "congelare" sia A1 del foglio1:

1) nel vb di Questa cartella di lavoro:
Private Sub Workbook_Open()
Application.OnTime TimeValue("17:30:00"), "FreezeValue"
End Sub


2) in un modulo:
Sub FreezeValue()
Worksheets("Foglio1").Range("A1").Value = Worksheets("Foglio1").Range("A1")
End Sub


(chiudi e riapri il foglio).

Ovviamente la formula (dopo le 17:30) non ci sarà più.
Cambia l'orario per fare le tue prove.

Saluti

[Modificato da dodo47 11/09/2017 19:06]
Domenico
Win 10 - Excel 2016
Post: 1
Registrato il: 11/09/2017
Città: MILANO
Età: 27
Utente Junior
2003
OFFLINE
12/09/2017 13:45

Re:
dodo47, 11/09/2017 18.40:

Ciao
supponendo che la cella da "congelare" sia A1 del foglio1:

1) nel vb di Questa cartella di lavoro:
Private Sub Workbook_Open()
Application.OnTime TimeValue("17:30:00"), "FreezeValue"
End Sub


2) in un modulo:
Sub FreezeValue()
Worksheets("Foglio1").Range("A1").Value = Worksheets("Foglio1").Range("A1")
End Sub


(chiudi e riapri il foglio).

Ovviamente la formula (dopo le 17:30) non ci sarà più.
Cambia l'orario per fare le tue prove.

Saluti




Grazie mille per la risposta, ora avrei un' altra domanda, supponendo che il giorno seguente vi sia un' altra casella in un' altra riga da "congelare", vorrei far si che ogni giorno congeli una casella diversa

[Modificato da Casta996 12/09/2017 13:45]
Post: 1.610
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
12/09/2017 16:19

Ciao
deve pur esserci un criterio per il quale si "congela" una cella al posto di un'altra; se lo esponi potremo cercare di risolvere.

In linea di massima posso dirti di fare una specie di tabella/calendario con a fianco le celle da bloccare.

Poi da macro si individua la data del giorno, si cerca in questa tabella, e si blocca la relativa cella.

Saluti
[Modificato da dodo47 12/09/2017 16:22]
Domenico
Win 10 - Excel 2016
Post: 2
Registrato il: 11/09/2017
Città: MILANO
Età: 27
Utente Junior
2003
OFFLINE
13/09/2017 10:41

Re:
dodo47, 12/09/2017 16.19:

Ciao
deve pur esserci un criterio per il quale si "congela" una cella al posto di un'altra; se lo esponi potremo cercare di risolvere.

In linea di massima posso dirti di fare una specie di tabella/calendario con a fianco le celle da bloccare.

Poi da macro si individua la data del giorno, si cerca in questa tabella, e si blocca la relativa cella.

Saluti



Ok ci ho pensato e ho deciso di fare in un modo che per me sembra semplificato:

La cella dove prendo il valore sarà sempre la stessa e non deve essere "congelata" in quanto il giorno seguente conterrà un altro valore.

Quindi ogni giorno la macro deve prendere il valore ad un certo orario e copiarlo in un altra scheda in modo da formare una colonna con di fianco la data anche per esempio:

14/09/2017 3000
15/09/2017 4000
16/09/2017 2300

E dovrebbe anche saltare il sabato e la domenica per i quali non ci sono i dati da copiare.

Credo che questa sia la soluzione migliore e più semplificata, mi sapreste aiutare? Mi basta il codice poi per adattarlo alle caselle e varie altre cose ci penso io, grazie in anticipo

Post: 2.011
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
13/09/2017 11:44

ciao

una possibile modifica alla sub() di Dodo , che saluto, e' questa
da inserire sempre in un modulo


Sub FreezeValue()
Dim Nriga As Long
Nriga = Cells(Rows.Count, "M").End(xlUp).Row + 1
If Weekday(Date, 2) < 6 Then
Worksheets("Foglio1").Cells(Nriga, "M").Value = Now
Worksheets("Foglio1").Cells(Nriga, "N").Value = Worksheets("Foglio1").Range("A1")
End If
End Sub



questa prende il valore della cella A1 e lo riporta in una colonna sempre nel foglio1 aggiungendo la dataOra e il valore
colonne interessate M e N

Ciao da locate
excel 2007 / 13
Post: 3
Registrato il: 11/09/2017
Città: MILANO
Età: 27
Utente Junior
2003
OFFLINE
14/09/2017 12:10

Re:
locatevaresino, 13/09/2017 11.44:

ciao

una possibile modifica alla sub() di Dodo , che saluto, e' questa
da inserire sempre in un modulo


Sub FreezeValue()
Dim Nriga As Long
Nriga = Cells(Rows.Count, "M").End(xlUp).Row + 1
If Weekday(Date, 2) < 6 Then
Worksheets("Foglio1").Cells(Nriga, "M").Value = Now
Worksheets("Foglio1").Cells(Nriga, "N").Value = Worksheets("Foglio1").Range("A1")
End If
End Sub



questa prende il valore della cella A1 e lo riporta in una colonna sempre nel foglio1 aggiungendo la dataOra e il valore
colonne interessate M e N




Ok perfetto, ho fatto un po di test e viene così:
Su thisworkbook inserisco:


Private Sub Workbook_Open()
Application.OnTime TimeValue("10:00:00"), "FreezeValue"
End Sub



Quindi all' apertura del file excel attiva questa macro, sui moduli inserisco questa:


Sub FreezeValue()
Dim Nriga As Long
Nriga = Cells(Rows.Count, "M").End(xlUp).Row + 1
If Weekday(Date, 2) < 6 Then
Worksheets("apertura2").Cells(Nriga, "A").Value = Now
Worksheets("apertura2").Cells(Nriga, "B").Value = Worksheets("apertura").Range("L2")
Worksheets("apertura2").Cells(Nriga, "C").Value = Worksheets("apertura").Range("L3")
Worksheets("apertura2").Cells(Nriga, "D").Value = Worksheets("apertura").Range("L4")
Worksheets("apertura2").Cells(Nriga, "E").Value = Worksheets("apertura").Range("L5")
Worksheets("apertura2").Cells(Nriga, "F").Value = Worksheets("apertura").Range("L6")
Worksheets("apertura2").Cells(Nriga, "G").Value = Worksheets("apertura").Range("L7")
Worksheets("apertura2").Cells(Nriga, "H").Value = Worksheets("apertura").Range("L8")
Worksheets("apertura2").Cells(Nriga, "I").Value = Worksheets("apertura").Range("L9")
Worksheets("apertura2").Cells(Nriga, "J").Value = Worksheets("apertura").Range("L10")
Worksheets("apertura2").Cells(Nriga, "K").Value = Worksheets("apertura").Range("L11")
Worksheets("apertura2").Cells(Nriga, "L").Value = Worksheets("apertura").Range("L12")
Worksheets("apertura2").Cells(Nriga, "M").Value = Worksheets("apertura").Range("L13")
Worksheets("apertura2").Cells(Nriga, "N").Value = Worksheets("apertura").Range("L14")
Worksheets("apertura2").Cells(Nriga, "O").Value = Worksheets("apertura").Range("L15")
Worksheets("apertura2").Cells(Nriga, "P").Value = Worksheets("apertura").Range("L16")
Worksheets("apertura2").Cells(Nriga, "Q").Value = Worksheets("apertura").Range("L17")
Worksheets("apertura2").Cells(Nriga, "R").Value = Worksheets("apertura").Range("L20")
End If
End Sub



Mi copia una serie di dati da varie caselle, probabilmente si può fare in modo semplificato senza dover scrivere così come ho fatto io, ma non sono molto esperto di questo linguaggio magari me lo semplificate voi? In ogni caso così funziona, alle 10 in punto mi copia i dati.

Ora vorrei sapere come modificare il metodo OnTime in modo che copi il dato solo una volta al giorno se sono dentro un range di tempo:

apro il file excel se sono tra le 9 e le 17 copia i dati una volta e poi si passa al giorno dopo. Grazie in anticipo per le risposte



Post: 2.012
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
14/09/2017 16:22

ciao

la sub() si potrebbe integrare con un ciclo for, ma va bene anche in questo modo, piu' leggibile
una cosa che devi fare e' apportare una modifica al valore di Nriga

Nriga = Cells(Rows.Count, "M").End(xlUp).Row + 1
in questo modo ( mia svista )
Nriga = Worksheets("apertura2").Cells(Rows.Count, "A").End(xlUp).Row + 1

per il tempo la funzione OnTime fa gia' il suo lavoro
ti passo help di descrizione di questa


Application.OnTime, metodo
Programma una routine affinché venga eseguita a una determinata ora futura, vale a dire a una determinata ora del giorno o dopo un determinato periodo.
Sintassi

espressione.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

espressione Variabile che rappresenta un oggetto Application.

Parametri

Nome Obbligatorio/Facoltativo Tipo di dati Descrizione
EarliestTime Obbligatorio Variant Specifica l'ora a cui si desidera eseguire la routine.
Procedure Obbligatorio String Specifica il nome della routine da eseguire.
LatestTime Facoltativo Variant Specifica il tempo massimo entro il quale la routine può essere eseguita. Se ad esempio l'argomento LatestTime viene impostato su EarliestTime + 30 e Microsoft Excel non è in modalità Pronto, Copia, Taglia o Trova all'ora specificata in EarliestTime perché è in esecuzione un'altra routine, l'applicazione attenderà 30 secondi affinché la prima routine venga completata. Se non viene attivata la modalità Pronto entro 30 secondi, la routine non verrà eseguita. Se questo argomento viene omesso, Microsoft Excel attenderà fino a quando sarà possibile eseguire la routine.
Schedule Facoltativo Variant Se ha valore True, verrà programmata una nuova routine OnTime. Se ha valore False, verrà annullata una routine impostata in precedenza. Il valore predefinito è True.

Note


Utilizzare Now + TimeValue(time) per una programmazione in un'ora successiva all'ora corrente. Utilizzare TimeValue(time) per una programmazione in una determinata ora.


Esempio


In questo esempio viene eseguita la routine my_Procedure 15 secondi dopo l'ora corrente.
Visual Basic, Application Edition
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

In questo esempio viene eseguita la routine my_Procedure alle 17.
Visual Basic, Application Edition
Application.OnTime TimeValue("17:00:00"), "my_Procedure"

In questo esempio viene annullata l'impostazione di OnTime dell'esempio precedente.
Visual Basic, Application Edition
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
Procedure:="my_Procedure", Schedule:=False


Ciao da locate
excel 2007 / 13
Vota: 15MediaObject5,0018 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 06:05. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com