ad 1.
Public Start As Date
Private Sub Workbook_Open()
Start = Now()
Range("A2").Value = Start
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A3").Value = Now() - Start
ActiveWorkbook.Save
End Sub
Podotýkám, že do pole A2 se vloží čas startu (lze odstranit, pokud nepotřebuješ), do pole A3 se pak vkládá doba posledního otevření. Pokud jsi to chtěl tak, aby se počítala doba "od začátku existence sešitu", musel bys nadefinovat/inicializovat (ručně spustit) pro první běh globální proměnnou Start a výpočet pro A3 by byl (zaměň v původním kódu):Range("A3").Value = Range("A3").Value + Now() - Start