Newsgroup: it.comp.os.win.software
Titolo: Aiuto in Excel - funzione OGGI()

Come posso rendere permanete il risultato della funzione OGGI() che è
volatile?
Quando in A1 mettono un valore in B1 compare la data del giorno.
Io vorrei che restasse la data di quel giorno non ricalcolata ogni giorno.
=SE(A1<>"";oggi();"")
Grazie per qualsiasi aiuto.
    Gian Pietro.

 =SE(A1<>"";oggi();"")
Puoi "consolidare" a mano il valore con un copia/incolla speciale/solo
valore della cella su se stessa oppure scrivere due righe di codice VBA.
Cosa preferisci? Nel secondo caso bisognerebbe valutare quando mandarle in
esecuzione: ogni volta che si crea una nuova Cartella di lavoro basata su di
un modello; alla pressione di un pulsante; quando si aggiunge un Foglio alla
Cartella di lavoro...
--
Ciao.
Maurizio

     Gian Pietro.
Da quello che ho capito vuoi che quando una cella della colonna "a" cambia e
non ha
un valore nullo, nella colonna "b" venga inserita la data corrente.
Prova a mettere questo codice nell'evento change del foglio che devi usare.
Nella colonna "b" non devi mettere niente, neanche la formula di cui
parlavi.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    If Len(Target) > 0 Then
        Cells(Target.Row, Target.Column + 1) = Format(Now, "long date")
    Else
        Cells(Target.Row, Target.Column + 1) = Empty
    End If
End If
End Sub

 Cartella di lavoro...
Credo che in VBA il metodo migliore sia che nella routine_evento
Workbook_Open(), venga effettuato il controllo della cella B1 e, se vuota,
inserisca la data attuale altrimenti esca senza far nulla.
Alessandro

Grazie mille, č quello che volevo e sembra funzionare correttamente!
Nel codice ho cambiato la colonna perchč non era la A e il formato della
data perchč mi serviva piů corta.
Devo provare a scuola su una versione precedente di Excel se riesco ad
inserire il codice.
Per il momento grazie.

Non sono riuscito a farlo funzionare a scuola.
Ho Excel ver.7 per Win 95 e non so dove inserirlo.
A casa ho inserito il codice dove ci sono le macro e c'č un Visual Basic
Editor a scuola l'ho inserito in Modulo1 ma mi segnala degli errori e non so
se funziona:
nella prima riga ...Worksheet_Change ... mi dice che devo "chiudere la
condizione" e cosě dopo i ...Then - la , non me la prende come segno di
punteggiatura.
Probabilmente č una versione diversa di VB se puoi darmi ancora una dritta
per risolvere definitivamente il problema?
Grazie di tutto.



 wrote in message
87udr9$1t7$1...@nslave2.tin.it...

Se non ricordo male la versione italiana di excel 7 usa una versione
tradotta in italiano del linguaggio vba ma si puň indicare al
programma di usare quella in inglese.
In un modulo inserisci queste macro
Sub Auto_Open
Worksheets(1).OnEntry = "InserisciData"
End Sub
Sub InserisciData()
With ActiveCell
    If .Column = 1 Then
        If Len(ActiveCell) > 0 Then
            Cells(.Row, .Column + 1) = Date
        Else
            Cells(.Row, .Column + 1) = Empty
        End If
    End If
End With
End Sub
In italiano dovrebbero essere
Procedura Auto_Apri
Foglidilavoro(1).suimmissione = "InserisciData"
Fine procedura
Procedura InserisciData()
Con CellaAttiva
    se .colonna = 1 allora
        se lunghezza(cellaattiva) > 0 allora
            celle(.riga, .colonna+ 1) = Data
        altrimenti
            celle(.riga, .colonna+ 1) = vuoto
        fine se
    fine se
fine con
fine procedura
Perň, almeno in excel2000, se viene premuto il tasto canc
per cancellare il contenuto della cella, la macro non viene
eseguita. Quindi o disabiliti il tasto canc aggiungendo alla
macro auto_open la riga
application.onkey "{DEL}", ""
in italiano: applicazione.sutasto "{CANC}"; ""
oppure chiedi a chi usa il foglio di non premere
il tasto canc nella colonna A

Sono riuscito a farlo funzionare con il codice VB in italiano grazie alle
tue indicazioni. Mi è sembrato così veloce che ho tradotto anche un'altra
funzione in VB.
Ti invio il risultato finale:
'
Procedura Auto_Apri()
Scrivi Fogli("REGISTRO").SuImmissione = "InserisciData"
Fine Procedura
'
Procedura InserisciData()
Con CellaAttiva
'
'  *** cella attiva con codice inserisce il nome alunno preso da un altro
foglio
'
   Se .Colonna = 1 Allora
        Se Lunghezza(CellaAttiva) > 0 Allora
            Dim Foglio; Riga; Cella
            Foglio = mid(CellaAttiva; 1; 1)
            Riga = mid(CellaAttiva; 2; 2)
            Cella = Fogli(Foglio).Celle(Riga; 2)
            Cella = Cella & " " & Fogli(Foglio).Celle(Riga; 3)
            Cella = Cella & " (" & Fogli(Foglio).Celle(Riga; 4)
            Cella = Cella & Fogli(Foglio).Celle(Riga; 5) & ")"
            Celle(.Riga; .Colonna + 1) = Cella
        Altrimenti
            Celle(.Riga; .Colonna + 1) = Vuoto
        Fine Se
    Fine Se
'
'  *** cella attiva valida inserisce la data
'
    Se .Colonna = 3 Allora
        Se Lunghezza(CellaAttiva) > 0 Allora
            Celle(.Riga; .Colonna + 1) = Data
        Altrimenti
            Celle(.Riga; .Colonna + 1) = Vuoto
        Fine Se
    Fine Se
'
'  *** cella attiva valida inserisce la data
'
    Se .Colonna = 5 Allora
        Se Lunghezza(CellaAttiva) > 0 Allora
            Celle(.Riga; .Colonna + 1) = Data
        Altrimenti
            Celle(.Riga; .Colonna + 1) = Vuoto
        Fine Se
    Fine Se
Fine Con
Fine Procedura
_____________________
Non riesco a tradurre la funzione Mid() di VB chiedero un nuovo aiuto al
News
Per il momento Grazie infinite.

 News
Non ho seguito la conversazione dall'inizio per cui potrei rischiare di
andare fuori tema: nel caso ti prego di scusarmi.
Sicuramente saprai che il linguaggio macro e il basic di excel sono stati in
italiano fino a Office 95 (se non erro: excel 7); in quella versione era
distribuito il file "VBARIF.XLS" con le corrispondenze italiano-inglese
delle "Parole chiave di VBA" e di "Oggetti, metodi e proprieta' di Microsoft
Excel" in cui "Mid" viene tradotto con "StrParte".
Esisteva, nelle versioni precedenti, un analogo file per il linguaggio
macro, che ha subito schizofreniche modifiche da una versione all'altra.
--
Ciao.
Maurizio

Stamattina sono riuscito, per tentativi, a trovare la traduzione italiana e
il codice funziona bene ed è veloce, per essere su un 486.
Ma la tua informazione mi è preziosa se dovessi modificare qualcosa.
Grazie Gian Pietro.

Chiedo scusa per la R: nell'oggetto della risposta di prima, è stata una
distrazione.