Discussione:
Help, inserimento automatico data ultima modifica.
(troppo vecchio per rispondere)
Francesco
2008-04-02 14:50:40 UTC
Permalink
Salve, avrei la necessità che in un file excel, con più fogli, venga
scritta in automatico in una cella che devo scegliere io, la data in
cui sono stati effettuati gli ultimi inserimenti, magari per ogni
singolo foglio, io ho inserito la funzione ADESSO(), ma non mi serve
perchè modifica la data ogni volta che apro il file o un singolo
foglio, io ho invece bisogno che venga inserita solo quando vengono
effettuati degli inserimenti. Tenendo presente che non sono esperto di
VBA, Vi ringrazio tantissimo per la gentile risposta.
Francesco.
Norman Jones
2008-04-02 15:44:29 UTC
Permalink
Ciao Francesco,

=================
Salve, avrei la necessità che in un file excel, con più fogli, venga
scritta in automatico in una cella che devo scegliere io, la data in
cui sono stati effettuati gli ultimi inserimenti, magari per ogni
singolo foglio, io ho inserito la funzione ADESSO(), ma non mi serve
perchè modifica la data ogni volta che apro il file o un singolo
foglio, io ho invece bisogno che venga inserita solo quando vengono
effettuati degli inserimenti. Tenendo presente che non sono esperto di
VBA, Vi ringrazio tantissimo per la gentile risposta
=================

Nel modulo ThisWorkbook, (vedi di sotto)
incolla il seguente codice:

'=============>>
Option Explicit

'-------------------->>
Private Sub Workbook_Open()
StartSize = FileLen(Me.FullName)
End Sub

'-------------------->>
Private Sub Workbook_BeforeSave( _
ByVal SaveAsUI As Boolean, _
Cancel As Boolean)

Application.OnTime Now, "AfterSave"

End Sub
'<<=============

Dal foglio Excel:

Alt-F11 per aprire l'Editor di VBA
Ctrl-R per aprire la finestra Gestione Progetti
Fai un doppio click sull'oggetto ThisWorkbook
Incolla il suddetto codice
Alt-F11 per tornare in Excel.

In un modulo standard (vedi di sotto),
incolla:

'=============>>
Option Explicit
Public StartSize As Long

'-------------------->>
Public Sub AfterSave()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim CurrSize As Long

Set WB = ThisWorkbook

With WB
Set SH = WB.Sheets("Foglio1") '<<===== da CAMBIARE
Set Rng = SH.Range("A1") '<<===== da CAMBIARE
CurrSize = FileLen(.FullName)
Debug.Print FileLen(.FullName), "AfterSave"
End With

If CurrSize > StartSize Then
Rng.Value = Format(Now, "dd/mm/yy hh:mm")
End If

End Sub
'<<=============

Per utilizzare questa routine di evento,
dal foglio Excel:

Alt-F11 per aprire l'Editor di VBA
Menu | Inserisci | Modulo
Incolla il suddetto codice
Alt-F11 per tornare in Excel

Salva, chiudi e riapri il file.


---
Regards,
Norman
Norman Jones
2008-04-02 16:05:40 UTC
Permalink
Ciao Francesco,

================
[...]
Post by Norman Jones
Alt-F11 per aprire l'Editor di VBA
Menu | Inserisci | Modulo
Incolla il suddetto codice
Alt-F11 per tornare in Excel
:[...]
================

Avrei voluto aggiungere

il codice dovrebbe essere incollata
alla testa del modulo e prima di
qualsiasi altro codice.


---
Regards,
Norman
Francesco
2008-04-02 23:42:13 UTC
Permalink
Grazie, sei stato gentilissimo, lo provo subito e ti faccio sapere.
Ciao Norman, Francesco.
Francesco
2008-04-03 02:23:36 UTC
Permalink
Caro Norman, ho provato e riprovato ma non ho risoltao niente non
riesco a capire il perchè... Norman, visto che ci sei se posso, provo
a sottoporti un'altro quesito, ho bisogno di sapere i miei turni di
lavoro degli anni passati, sapendo che sono sempre uguali, mettiamo
1 2 3 4 e R , in pratica mettiamo turno 1 poi 2 poi 3 poi 4 e infine
Riposo sono sempre uguali, io vorrei che inserendo la data futura o
passata, mi desse come risultato il turno, si può fare ? Grazie Norman
e scusami, ma non so a chi rivolgermi.
Post by Francesco
Ciao Norman, Francesco.
Norman Jones
2008-04-04 21:26:56 UTC
Permalink
Ciao Francrsco,

===============
Caro Norman, ho provato e riprovato ma non ho risoltao niente non
riesco a capire il perchè...
===============

Prova a mandarmi il tuo workbook:

***@NOSPAMbtconnectDOTcom

(Cancella "NOSPAM" e sostituisci "DOT" con un punto)

Cmunque, prova anche la soluzione
suggerito da Maurizio che rispondee
alla esgenza di sapere la data di
aggiornamento di ciacun foglio del
workbook.

===============
Norman, visto che ci sei se posso, provo
a sottoporti un'altro quesito, ho bisogno di sapere i miei turni di
lavoro degli anni passati, sapendo che sono sempre uguali, mettiamo
1 2 3 4 e R , in pratica mettiamo turno 1 poi 2 poi 3 poi 4 e infine
Riposo sono sempre uguali, io vorrei che inserendo la data futura o
passata, mi desse come risultato il turno, si può fare ? Grazie Norman
e scusami, ma non so a chi rivolgermi.
===============

Ti chiederei di aprire un nuovo thread per
questa nuova domanda perche':

- le norme di netiquette richidono un
thread per ogni domanda

- Utilizzando un thread per ogni domanda
facilita una ricerca dell'archivio da chi
possa avere un problema simile.

- Utilizzando un nuovo thread aumenta la
possibilita' di una risposta utile per te.


---
Regards,
Norman
Norman Jones
2008-04-04 21:39:52 UTC
Permalink
Ciao Francesco,

===============
Cmunque, prova anche la soluzione
suggerito da Maurizio che rispondee
alla esgenza di sapere la data di
aggiornamento di ciacun foglio del
workbook.
===============

Riiprovo:

Comunque, prova anche la soluzione
suggerita da Maurizio che risponde alla
necessità di conoscere la data
dell'aggiornamento per ogni foglio del
workbook.


---
Regards,
Norman
Maurizio Borrelli
2008-04-03 04:00:14 UTC
Permalink
Post by Francesco
avrei la necessità che in un file excel, con più fogli, venga
scritta in automatico in una cella che devo scegliere io, la data in
cui sono stati effettuati gli ultimi inserimenti, magari per ogni
singolo foglio, io ho inserito la funzione ADESSO(), ma non mi serve
perchè modifica la data ogni volta che apro il file o un singolo
foglio, io ho invece bisogno che venga inserita solo quando vengono
effettuati degli inserimenti. Tenendo presente che non sono esperto di
VBA, Vi ringrazio tantissimo per la gentile risposta.
Ciao Francesco.

Se interpreto bene le tue esigenze dovrebbe fare al caso tuo qualcosa
del genere:

' ThisWorkbook - Workbook Class Module
'
Option Explicit

Private Const mcDateLastModifiedAddress = "A1" ' <- Da cambiare

Private mblnChanged As Boolean

Private Sub Workbook_BeforeClose(ByRef Cancel As Boolean)
If Cancel Then Exit Sub

If TypeName(Me.ActiveSheet) = "Worksheet" Then
If mblnChanged = False Then
' DO NOTHING
Else
UpdateDateLastModifiedRange Me.ActiveSheet
End If
End If
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If TypeName(Sh) <> "Worksheet" Then Exit Sub

mblnChanged = False
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object _
, ByVal Target As Range)
If TypeName(Sh) <> "Worksheet" Then Exit Sub

Dim rng As Excel.Range
Set rng = Sh.Range(mcDateLastModifiedAddress)
If rng.Address = Target.Address Then
' DO NOTHING
Else
mblnChanged = True
End If

Set rng = Nothing
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If TypeName(Sh) <> "Worksheet" Then Exit Sub

If mblnChanged Then UpdateDateLastModifiedRange Sh
End Sub

Private Sub UpdateDateLastModifiedRange(ByVal Wsh _
As Excel.Worksheet)
With Wsh
.Application.EnableEvents = False
.Range(mcDateLastModifiedAddress).Value = Now
.Application.EnableEvents = True
End With
End Sub

(Facci sapere se e eventualmente come hai risolto. Grazie!)

--
Maurizio Borrelli [Microsoft MVP]
http://www.riolab.org/
Francesco
2008-04-04 21:05:18 UTC
Permalink
Salve Maurizio, scusami ma io sono completamente a digiuno di VBA,
volevo chiederti come inserire tale codice, e se si riferisce alla
data o al secondo problema, grazie. Francesco.
Maurizio Borrelli
2008-04-05 07:36:58 UTC
Permalink
Post by Francesco
Salve Maurizio, scusami ma io sono completamente a digiuno di VBA,
volevo chiederti come inserire tale codice, e se si riferisce alla
data o al secondo problema
Ciao Francesco.

Si riferisce al problema in oggetto (inserimento automatico data ultima
modifica).

Fa' una copia di sicurezza della Cartella di lavoro di cui ci parlavi
("... avrei la necessità che in un file excel, con più fogli...")
quindi:

Seleziona e copia il codice che ti ho proposto
Apri Excel
Apri la Cartella di lavoro
Strumenti > Macro > Visual Basic Editor
Visualizza > Gestione progetti
Clic destro su: ThisWorkbook
Visualizza codice
Modifica > Seleziona tutto
Modifica > Incolla

Osserva l'istruzione:

Private Const mcDateLastModifiedAddress = "A1" ' <- Da cambiare

e, se ritieni sia il caso, sostituisci:

A1

con l'indirizzo della Cella che intendi usare per registrare la data
dell'ultima modifica (deve essere sempre la stessa per tutti i Fogli di
lavoro della Cartella). Poi:

Debug > Compila VBAProject
File > Salva <nome del file>
File > Chiudi e torna a Microsoft Excel
File > Esci

Ora opera normalmente e osserva il valore che compare nella Cella
definita in mcDateLastModifiedAddress.

--
Maurizio Borrelli [Microsoft MVP]
http://www.riolab.org/
Francesco
2008-04-08 02:03:08 UTC
Permalink
Grazie, vorrei ringraziare tutti, mi avete risolto il problema, adesso
funziona, siete stati molto gentili, grazie a tutti, Francesco.

Loading...