| | Post: 11 | Registrato il: 18/07/2006
| Utente Junior | Office 365 Pro Plus | | OFFLINE | |
|
16/03/2020 11:45 | |
Ciao a tutti,
ringrazio in anticipo per l'eventuale supporto.
Ho creato una macro che copia il testo da un file aperto in sola lettura e lo incolla in un altro file che funge da database.
Il mio problema è che per evitare che un salvataggio di un altro utente cancelli le modifiche effettuate dall'altro, avrei necessità al momento del salvataggio dei dati del file di destinazione, di effettuare una verifica che data e ora di apertura del file di origine non siano precedenti a quelle dell'ultimo salvataggio del file di destinazione.
E' possibile?
Incollo la macro per maggior chiarezza.
Salva KPI
Sub Salva_KPI()
Dim WB0 As Workbook
Dim WB1 As Workbook
Dim SH0 As Worksheet
Dim SH1 As Worksheet
Dim Rng As Range
Dim n As Variant
Dim sts As Variant
Const sFg0 As String = "KPI"
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = True
Set WB0 = ThisWorkbook
Set SH0 = WB0.Sheets(sFg0)
Set WB1 = Application.Workbooks.Open("W:Management Team\Daily Meeting\DATABASE DAILY MEETING 2020\Daily meeting 2020_database.xlsx", 3, False)
Set SH1 = WB1.Sheets(sFg0)
With SH0
If .AutoFilterMode Or .FilterMode Then
On Error Resume Next
.ShowAllData
End If
End With
With SH1
If .AutoFilterMode Then
Set Rng = .AutoFilter.Range
On Error Resume Next
If Rng.Rows.Count > Rng.SpecialCells(xlCellTypeVisible).Rows.Count Then
.ShowAllData
End If
End If
SH0.Range("B4:Q500").Copy
.Range("B4").PasteSpecial xlPasteValues
SH0.Range("A3:Q3").AutoFilter Field:=2, Criteria1:="<>1", Criteria2:="<>7"
End With
WB1.Save
WB1.Close
Set WB1 = Nothing
SH0.Activate
Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic
Set WB0 = Nothing
End Sub
[Modificato da marcomaiolino 16/03/2020 11:46] |
|
| | Post: 2.578 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
16/03/2020 11:56 | |
ciao
che io sappia (spero di sbagliare) non c'è una data di apertura di un file, tuttalpiù quella dell'ultima modifica o della creazione.
Se quanto sopra è corretto, il procedimento potrebbe essere:
all'apertura del file da controllare, viene alimentato (in append) un txt con data e ora, in modo che l'ultimo record sia quello relativo alla data più recente di apertura.
Quando dall'altro file si cerca di copiare, prima si va ad analizzare l'ultimo record di tale txt.
Questo per grandi linee.
saluti
[Modificato da dodo47 16/03/2020 12:21] Domenico
Win 10 - Excel 2016 |
| | Post: 11 | Registrato il: 18/07/2006
| Utente Junior | Office 365 Pro Plus | | OFFLINE | |
|
16/03/2020 12:35 | |
dodo47, 16/03/2020 11:56:
ciao
che io sappia (spero di sbagliare) non c'è una data di apertura di un file, tuttalpiù quella dell'ultima modifica o della creazione.
Se quanto sopra è corretto, il procedimento potrebbe essere:
all'apertura del file da controllare, viene alimentato (in append) un txt con data e ora, in modo che l'ultimo record sia quello relativo alla data più recente di apertura.
Quando dall'altro file si cerca di copiare, prima si va ad analizzare l'ultimo record di tale txt.
Questo per grandi linee.
saluti
E un po più in dettaglio?? 😅😅
|
| | Post: 2.579 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
16/03/2020 13:06 | |
ciao
non c'è molto altro da dire.
Quando viene aperto il file che sarà da controllare, sull'evento open di tale file si alimenta un file txt con data e ora:
....
Open FileTxt For Append As #1
Write #1, Now
Close #1
....
Quando dall'altro file vuoi scrivere su quello, vai a controllare l'ultima data contenuta nel file di testo e la confronti....
Come sei messo a programmazione?
saluti
[Modificato da dodo47 16/03/2020 13:15] Domenico
Win 10 - Excel 2016 |
| | Post: 12 | Registrato il: 18/07/2006
| Utente Junior | Office 365 Pro Plus | | OFFLINE | |
|
16/03/2020 13:38 | |
Non così bene... :D |
| | Post: 2.580 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
16/03/2020 16:21 | |
ciao
visto che sarebbe complesso poi per te, ti sottopongo un'altro modo:
aprire "in esclusiva" il file, ovvero:
- trasforma il tuo file:
Daily meeting 2020_database.xlsx in xlsm
- sull'evento open di tale file ci metti:
[TESRTO]Private Sub Workbook_Open()
On Error Resume Next
If ActiveWorkbook.MultiUserEditing Then
ActiveWorkbook.ExclusiveAccess
Else
MsgBox "File già in uso"
ActiveWorkbook.Close False
End If
End Sub
In questo modo se il file non è aperto da nessuno, sei sicuro che ci puoi copiare i dati.
Ovviamente ciò comporta che chiunque apra il file per primo, lo apre in modalità esclusiva.
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 13 | Registrato il: 18/07/2006
| Utente Junior | Office 365 Pro Plus | | OFFLINE | |
|
16/03/2020 17:30 | |
Il problema è che il precedente utente potrebbe già averlo salvato e richiuso. Il fatto di usarlo in modalità esclusiva non mi assicura che chi salverà dopo di lui non sovrascriva qualche cella che è stata aggiornata da un altro utente...
il confronto tra i due txt era un ottima soluzione.
Sono riuscito a scrivere lo script per far aggiornare i due txt con le date, ma non so come fargli effettuare il confronto. |
| | Post: 2.581 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
16/03/2020 17:53 | |
perchè 2 txt ?
Domenico
Win 10 - Excel 2016 |
|
|