Ciao Federico,
Premesso che non so nulla del tuo progetto, dubito che avrei adottato una tale strategia. Di diverse possibili strategie alternative, potrei forse aggiornare il file secondario una sola volta, alla chiusura del database.
Detto questo, prendendo la richiesta al valore nominale, potresti provare qualcosa del genere:
Alt-F11 per aprire l'editor di VBA
Alt-IM per inserire un nuovo modulo di codice
Nel nuovo modulo vuoto, incolla il seguente codice:
'==========>>
Option Explicit
Option Private Module
'---------->>
Property Get myFilename() As String
myFilename = "Pippo.xlsx" '<<==== Cambia
End Property
'<<==========
Fai doppio clic su ThisWorkbook e incolla il seguente codice:
'==========>>
Option Explicit
'--------->>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim WB As Workbook
On Error GoTo ErrHandler
Set WB = Workbooks(myFilename)
WB.Close Savechanges:=False
Exit Sub
ErrHandler:
Call MsgBox(Prompt:="Error " _
& Err.Number _
& " (" _
& Err.Description _
& ") nella routine: Workbook_BeforeClose", _
Buttons:=vbCritical, _
Title:="ERRORE")
End Sub
'--------->>
Private Sub Workbook_SheetChange(ByVal SH As Object, ByVal Target As Range)
Dim WB As Workbook
Dim CalcMode As Long
Dim sStr As String
On Error GoTo ErrHandler
With Application
.ScreenUpdating = False
CalcMode = .Calculation
.Calculation = xlCalculationManual
End With
On Error Resume Next
sStr = myFilename
Set WB = Workbooks(sStr)
If Err.Number = 9 Then
Err.Clear
On Error GoTo ErrHandler
Set WB = Workbooks.Open(sStr)
End If
WB.Save
XIT:
Me.Activate
With Application
.Calculation = CalcMode
.ScreenUpdating = True
End With
On Error GoTo 0
Exit Sub
ErrHandler:
Call MsgBox(Prompt:="Error " _
& Err.Number _
& " (" _
& Err.Description _
& ") nella routine: Workbook_SheetChange", _
Buttons:=vbCritical, _
Title:="ERRORE")
Resume XIT
End Sub
'<<==========
Alt-Q per chiudere l'editor di VBA
Salva il file Database.
===
Regards,
Norman